プログラミング Java

【Java入門】プリミティブ型と参照型とは?

投稿日:

概要

Javaのデータ型にはプリミティブ型と参照型があります。
ここではそれぞれの型はどのようにデータを保持しているのか?
また、どのような種類があるのか?
について学んでいきます。
 

プリミティブ型とは?

値を直接保持しているデータ型です。
これは参照型との対比で違いがわかるので、まずは「普通に値を持っているデータ型なんだな」という理解でOKです。

<プリミティブ型 一覧>
以下にデータ型と持つことができる値の範囲を示します。

データ型意味値の範囲
boolean二者択一条件を表すtrue, false
char16ビットのUnicode文字\u0000~\FFFF
byte8ビットの整数-128~127
short16ビットの整数-32768~32767
int32ビットの整数-2147483648~2147483647
(-21億4748万3648~21億4748万3647)
long64ビットの整数-9223372036854775808~9223372036854775807
(-922京3372兆0368億5477万5808~922京3372兆0368億5477万5807)
float32ビットの単精度浮動小数点負数:-3.4028235E+38 ~ -1.401298E-45
正数:1.401298E-45 ~ 3.4028235E+38
double64ビットの単精度浮動小数点負数:-1.79769313486231570E+308 ~ -4.94065645841246544E-324
正数:4.94065645841246544E-324 ~ 1.79769313486231570E+308

  

参照型とは?

直接データを保持せず、データを保持しているメモリ上の位置情報を参照しているデータ型です。
参照型には以下の3種類のデータ型があります。
 

オブジェクト型

Object型を親とするクラスとして定義されたデータ型です。
良くみるオブジェクト型は、String型、ArrayList型、Integer型などがあります。

列挙型

複数の定数を1つにまとめておくことができるデータ型です。
定数は変わることのない値です。

配列

複数の値を持つことができる構造のデータ型です。
[]で表すことができます。(String[] argsなど)
 

プリミティブ型と参照型の違いを図解

プリミティブ型と参照型は、データを保持する方法が異なることは前述しました。
それを図解すると以下のようになります。

※「@6x3skzuz」はヒープ領域を参照するアドレスです。

スタック領域:ヒープ領域の参照情報やプリミティブ型の値を保持する領域
ヒープ領域 :参照型のインスタンス(オブジェクト型や配列型の実際の値)を保持する領域
 

プリミティブ型と参照型を意識しなくてはいけない理由

プログラミングをしていて、あるデータを別の変数にコピーすることがあります。
そのとき、プリミティブ型と参照型は異なる挙動をします。

プリミティブ型はコピーしても元の値が変更されることはないため、予期しない動作になることはありません。
しかし、参照型は同じ参照先を見ているため、コピー先の変更がコピー元の変更にもなってしまいます。
これはバグを生む可能性につながります。

そのため、参照型を扱う場合は変更されたインスタンスが他から参照されていないようにするか、新しく別のインスタンスを作って別物として扱うようにする必要があるということを覚えていてください。
 

まとめ

  • データ型にはプリミティブ型と参照型がある。
  • プリミティブ型は値を直接保持するデータ型である。
  • 参照型は値を保持しているメモリ領域(ヒープ領域)を参照するアドレスを保持している。
  • 参照型はその性質から、コピー先での変更がコピー元の変更にもなってしまうということに注意する。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

Jacksonで日付がずれる場合、Timezone設定を直す

現象 JacksonでCSV出力する際、日付がズレて出力される。   原因 タイムゾーンの設定がTokyo/Asiaになっていない。   対策 application.proper …

【Java】Stringのequalsで定数を左側にする理由

JavaのStringでequalsによる等価判定を行う場合に、 比較対象となる定数は左側にする理由はNullPointerExceptionを回避するためです。 以降、NullPointerExce …

ModelからBindingResultが消える原因と対処方法

環境 Java(SpringFramework) Thymeleaf 状況 更新画面でバリデーションエラーにより更新が失敗したというようなケースにおいて、 BuindingResultにFormのエラ …

【JdbcTemplate】Queryの書き方(更新系)

  前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で説明していきます。 usersテーブル

【Java】TDDして汎用的な部品を作成する(日付期間オブジェクト)

目的 TDDブートキャンプというセミナーに参加して面白かったので、 自分で何かやってみようと思った。 仕様 日付期間を保持するオブジェクトである。 開始日と終了日を持つ。 開始日と終了日を持つことをど …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。