Java の Long データ型と Int データ型の違い
この記事では、Java の int
データ型と long
データ型の違いについて説明し、ラッパークラス Integer
と Long
について説明します。これらのデータ型とラッパークラスの違いを理解し、シナリオに応じてどちらを使用するかを決定できるようになります。
Java の int
および long
データ型
int
データ型は、整数を格納する Java のプリミティブデータ型です。これは、int
が変数値のサイズとタイプを指定することを意味します。ただし、メソッドを呼び出すことはできません。int
のサイズは 4 バイトです。-2,147,483,648
から 2,147,483,647
までの値を格納できます。
long
データ型も、Java の 8 バイトのプリミティブデータ型です。整数を格納するために、int
よりも広い範囲があります。long
データ型は、int
が保持できないより大きな整数を保持するために使用されます。-9,223,372,036,854,775,808
から 9,223,372,036,854,775,807
までの値を格納できます。
たとえば、int
データ型で変数 num1
を作成し、long
データ型で num3
を作成します。100
の値を num1
に割り当て、15000000000L
を num3
に割り当てます。コンソールで変数を出力します。ここでも、同じデータ型で別の変数 num2
を作成し、2147483648
の値を割り当てます。次に、num2
変数を出力します。これらのコード行は、クラス内の main メソッド内に記述する必要があることに注意してください。
最初のコード例は正常に実行されますが、2 番目の例ではエラーが発生します。これは、値 2147483648
が int
データ型の範囲を超えているためです。long
データ型の値の後に L
を記述して、long
値を示します。
サンプルコード:
int num1 = 100;
long num3 = 15000000000L;
System.out.println(num1);
System.out.println(num3);
出力:
100 15000000000
サンプルコード:
int num2 = 2147483648;
System.out.println(num2);
出力:
Main.java:3: error: integer number too large
int num2 = 2147483648;
^
1 error
Java の Integer
と Long
のラッパークラス
ラッパークラスは、オブジェクトがプリミティブデータ型を格納できる特定のタイプのクラスです。Integer
および Long
ラッパークラスについて説明します。ラッパークラスからラッパーオブジェクトを作成できます。これにより、オブジェクトに関連付けられたさまざまなメソッドを使用できます。
たとえば、ラッパークラス Integer
のオブジェクト myInt
を作成し、値 50
を割り当てます。ラッパークラス Long
から別のオブジェクト myLong
を作成し、値 326162165161616161
を割り当てます。変数 myInt
と myLong
を出力します。次に、String
ラッパークラスの 2つのオブジェクトを myString1
と myString2
として作成します。myInt
および myLong
オブジェクトのそれぞれでメソッド toString()
を使用します。最後に、length()
メソッドを呼び出して、オブジェクト myString1
と myString2
の長さを出力します。
以下の例では、ラッパークラス Integer
、Long
、および String
からオブジェクトを作成しました。オブジェクトを使用して、toString()
や length()
などのメソッドを呼び出しました。toString()
メソッドは値を文字列に変換し、length()
メソッドを使用してそれらの長さを計算できます。プリミティブデータ型からこれらのメソッドにアクセスしようとすると、アクセスできません。したがって、ラッパークラスを使用すると、さまざまな操作のメソッドを使用するラッパーオブジェクトを作成できます。
コード例:
Integer myInt = 50;
Long myLong = 326162165161616161L;
System.out.println(myInt);
System.out.println(myLong);
String myString1 = myInt.toString();
System.out.println(myString1.length());
String myString2 = myLong.toString();
System.out.println(myString2.length());
出力:
50
326162165161616161
2
18
Java での int
と Integer
および long
と Long
の違い
int
または long
と Integer
および Long
の主な違いは、データ型がプリミティブ型であるのに対し、ラッパークラスは非プリミティブ型であるということです。プリミティブデータ型は特定の値を保持しますが、ラッパークラスのオブジェクトは、格納されているデータの場所へのポインタにすぎません。
Integer myInt = new Integer(5);
int num = 5
上記の myInt
オブジェクトは、データ 5
の場所への単なるポインタです。myInt
オブジェクトが格納されているメモリには、値 5
の場所のメモリアドレスが含まれています。これは、値の場所への参照にすぎません。一方、変数 num
が格納されているメモリには、値 5
が含まれています。
この概念は、null
値で視覚化できます。myInt
オブジェクトを null 値で設定することはできますが、num
変数で同じことを行うことはできません。オブジェクトは参照型であるため、オブジェクトは null アドレスを参照できます。int
はプリミティブであり、参照できないため、int
データ型に null 値を含めることはできません。したがって、オブジェクトに null
を割り当てると、null として出力されますが、int
タイプに割り当てると、エラーがスローされます。
サンプルコード:
Integer myInt = null;
System.out.println(myInt);
出力:
null
サンプルコード:
int num = null;
System.out.println(myInt);
出力:
Main.java:6: error: incompatible types: <null> cannot be converted to int
int num = null;
^
1 error