プログラミング 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


関連記事

no image

XSS対策の基本は入力値制限とサニタイジング(無害化)の2つ

XSS(クロスサイトスクリプティング)の基本的な対策は何をすればいいのかがぼんやりしている方向けの書いています。 対策方法はタイトルの通り、XSS(クロスサイトスクリプティング)対策の基本は入力値制限 …

【Spring】バリデーション時に、入力値を保持する方法

登録画面で「登録」ボタンを押した後、 バリデーションで引っ掛かってエラーになっても 入力内容を画面に保持して置く方法についてです。 テンプレートエンジンは、Tymeleafを使用しています。 方法とし …

SpringでNotNullなどのバリデーションが効かないときの対処法

状況 フィールドに入っている値は空文字なのに、 @NotNull, @NotEmpty, @NotBlankでエラーとして検知されない。 (BindingResultでhasErroe=0件となる) …

【Bootstrap】入力フォームを作成しよう!

概要 SpringBootチュートリアルで作成した各画面の入力フォームをBootstrapに置き換えます。 また、containerを使用することで容易にグリッドシステムを導入できます。 実装 検索画 …

MySQL-タイムゾーン設定すると起動しなくなる原因と対処方法

MySQLのタイムゾーン設定をすると、XAMPPでMySQLが起動できなる原因と対処法です。   原因 原因は、MySQL(MariaDB)は最初から日本語設定が入ってないためです。 def …

SpringFramworkの良書

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

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