【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」はヒープ領域を参照するアドレスです。

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

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

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

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

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

まとめ

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

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次