プログラミング 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 SE 11 Goldに合格する確実な方法

前提 Java SE 11 GoldはSilverに合格していないと受験できません。 飛び級的な合格はないので、Silverに合格していない方は先にSilverを取得しましょう。 現状を知る 自分がど …

【Java】配列の扱い方(初期化、追加、ソート、List変換など)

配列とは? ザックリ言うと、同じ種類の複数データを1つの変数に持つことができる仕組みです。 でも文字だけだとわかりずらいですよね💦 なので以下のコードを確認してみて下さい。 [crayon-647ba …

junit, テスト, junit5

【Junit5】アノテーションの意味をざっくりと解説

Junit5のアノテーションについてざっくりと理解するための記事です。 なんか見たことあるけど、要するに何に使うやつなんだっけ? を軽く思い出すためにあります。 テストを実行 @Test テストメソッ …

Iteratorパターンは何のためにあるか?

Iteratorパターンとは Iteratorパターンとは、「何らかのリストから順次取り出す仕組み」です。 Iteratorパターンではわざわざインターフェースで実装していますよね。 これは、イテレー …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

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

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