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


関連記事

プログラミングを上達させるために私がやってきたこと・やっていること

私の上達過程 写経 自分のレベルに合う本をもとに写経しては、コードの意味を調べて理解し、少しづつ体に染み込ませるように身に着けていきました。 とにかく初心者のころは右も左も分からず、ちょっとしたエラー …

【Java入門】メソッドとは?使い方まとめ

概要 メソッドとは何か? また使い方をわかり易く説明します。   メソッドとは? 固く言うと、一連の処理を一つにまとめたものです。 平たく言うと、何らかの処理を1つにまとめたものです。 例 Syste …

【Java】オブジェクト指向の練習題材(成績オブジェクト)

前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。 ここでは2つのオブジェクトを作成していきます。 成績オブジェクト:教科と点数などを保持 生徒オブジェクト:氏名と成績を保持 …

【SpringBoot入門】#1~ 開発環境を準備しよう(IDE)

想定読者 SpringBootを始めて学ぶ方   IDE(Eclipse) IDEにはEclipse以外にもNetBeansやIntelliJがあります。 好みによりますので使いやすいものを …

【Spring Data JPA】deleteAllとdeleteAllInBatchの違い

概要 Spring JPA Dataにおける、deleteAllとdeleteAllInBatchの挙動の違いについてです。 結論から言うと、実行されるSQLが違います。 SQLの違い 【前提】 3件 …

SpringFramworkの良書

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

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