Javaにはプリミティブ型と参照型と呼ばれるデータ型の違いが存在しますが、概要についてしっかりと把握出来ているでしょうか。
本記事では、Javaのプリミティブ型についての概要から、参照型と呼ばれるデータ型との違いについてご紹介していきます。
Javaにおけるプリミティブ型とは
Javaでは、基本となるデータ型として8種類の型を用意しており、これらのデータ型をプリミティブ型と呼びます。
プリミティブ型では、値そのものを格納します。
8種類のデータ型
Javaでプリミティブ型として用意されているデータ型の一覧が下記です。
- byte: 8bit整数
- short: 16bit整数
- int: 32bit整数
- long: 64bit整数
- float: 32bit浮動小数点
- double: 64bit浮動小数点
- char: 16bit文字
- boolean: 真偽値
参照型との違い
参照型は、プリミティブ型とは異なり、値そのものではなくアドレスを保持するデータ型です。
アドレスを参照して値を取得することから、参照型と呼ばれます。
「配列」「List」などが参照型としてあげられます。
ラッパークラス
プリミティブ型には、ラッパークラスと呼ばれるプリミティブ型の値を包含したクラスが提供されています。
それぞれのプリミティブ型に関連する定数やメソッドが用意されています。
- byte: java.lang.Byte
- short: java.lang.Short
- int: java.lang.Integer
- long: java.lang.Long
- float: java.lang.Float
- double: java.lang.Double
- char: java.lang.Character
- boolean: java.lang.Boolean
Javaプリミティブ型のサンプルコード
Javaプリミティブ型について、実際のサンプルコードで具体的なデータの動きについて確認していきましょう。
データ範囲
プリミティブ型には、一覧で記した通り、それぞれのデータ型で適用出来る範囲が決まっています。
ラッパークラスに最大値・最小値の定数が用意されていますので、サンプルコードで確認してみましょう。
public class Main { public static void main(String[] args) { byte byteMax = Byte.MAX_VALUE; byte byteMin = Byte.MIN_VALUE; short shortMax = Short.MAX_VALUE; short shortMin = Short.MIN_VALUE; int intMax = Integer.MAX_VALUE; int intMin = Integer.MIN_VALUE; long longMax = Long.MAX_VALUE; long longMin = Long.MIN_VALUE; float floatMax = Float.MAX_VALUE; float floatMin = Float.MIN_VALUE; double doubleMax = Double.MAX_VALUE; double doubleMin = Double.MIN_VALUE; char ch = 'あ'; boolean bl1 = Boolean.TRUE; boolean bl2 = Boolean.FALSE; System.out.println("byteの最大値: " + byteMax); System.out.println("byteの最小値: " + byteMin); System.out.println("shortの最大値: " + shortMax); System.out.println("shortの最小値: " + shortMin); System.out.println("intの最大値: " + intMax); System.out.println("intの最小値: " + intMin); System.out.println("longの最大値: " + longMax); System.out.println("longの最小値: " + longMin); System.out.println("floatの最大値: " + floatMax); System.out.println("floatの最小値: " + floatMin); System.out.println("doubleの最大値: " + doubleMax); System.out.println("doubleの最小値: " + doubleMin); System.out.println("charの値: " + ch); System.out.println("booleanの真値: " + bl1); System.out.println("booleanの偽値: " + bl2); } }
実行した結果が下記です。
byteの最大値: 127 byteの最小値: -128 shortの最大値: 32767 shortの最小値: -32768 intの最大値: 2147483647 intの最小値: -2147483648 longの最大値: 9223372036854775807 longの最小値: -9223372036854775808 floatの最大値: 3.4028235E38 floatの最小値: 1.4E-45 doubleの最大値: 1.7976931348623157E308 doubleの最小値: 4.9E-324 charの値: あ booleanの真値: true booleanの偽値: false
このサンプルでは、それぞれのプリミティブ型で扱える最大値・最小値と、char型のサンプルデータをコンソールに出力しました。
参照型との扱いの違い
次に参照型との扱いの違いで気をつけたいポイントについて、サンプルコードで確認していきます。
public class Main { public static void main(String[] args) { int num1 = 5; int num2 = num1; num2 = 10; int[] num3 = new int[1]; num3[0] = 20; int[] num4 = num3; num3[0] = 3; System.out.println("プリミティブ型 num1: "+ num1); System.out.println("プリミティブ型 num2: "+ num2); System.out.println("参照型 num3: "+ num3[0]); System.out.println("参照型 num4: "+ num4[0]); } }
実行した結果が下記です。
プリミティブ型 num1: 5 プリミティブ型 num2: 10 参照型 num3: 3 参照型 num4: 3
プリミティブ型と参照型で、値を上書きした際の挙動が異なることが確認出来るかと思います。
これが実際の値を格納するプリミティブ型か、アドレスから値を参照する参照型かの違いです。
プリミティブ型では、6行目で値を上書きしても該当変数の値のみが上書きされているのに対し、参照型では12行目で上書きした値が11行目で変数に代入した元の変数も上書きされていることを意識する必要があります。
さいごに: Javaのプリミティブ型と参照型の違いを理解しよう
本記事では、Javaのプリミティブ型について、データ型の種類と概要に加えて、参照型との違いをサンプルコードを掲載しながらご紹介してきました。
プリミティブ型のデータ範囲については暗記する必要はなく、それぞれどの程度の範囲まで扱えるのかを把握しながら都度調べる程度で十分です。
初心者の方が気を付けるべきは、参照型との扱いの違いなので、変数に設定した値が意図せず上書きされてしまうような場合、今回ご紹介したプリミティブ型と参照型の扱いの違いをもう一度確認してみてください。