Java では、int と Integer の両方が整数型データを表すために使用されますが、これらの間にはメモリ フットプリントなど、いくつかの重要な違いがあります。簡単に言うと:
1. Int は、整数値を直接格納する Java のプリミティブ データ型 (プリミティブ型) です。32 ビット システムでは、int は 4 バイト (32 ビット) を占有し、64 ビット システムでは、int も 4 バイトを占有します。
2. Integer は Java のラッパー クラス (ラッパー クラス) の 1 つで、int をオブジェクトに変換する方法を提供します。整数オブジェクトには、int フィールドと関連メソッドが含まれます。32 ビット システムおよび 64 ビット システムでは、Integer オブジェクトは少なくとも 16 バイト (128 ビット) を占有します。これには、オブジェクトのヘッダー オーバーヘッド、int フィールドのストレージ、およびその他のオブジェクト管理オーバーヘッドが含まれます。
要約すると、メモリ使用量の観点から見ると、int は Integer よりもはるかに少ないメモリを占有します。
次に、int と Integer のメモリ使用量を示す特定のコードのデモを見てみましょう。
public class MemoryUsageDemo {
public static void main(String[] args) {
int primitiveInt = 42;
Integer integerObject = 42;
long primitiveIntSize = MemoryUtil.sizeOf(primitiveInt);
long integerObjectSize = MemoryUtil.sizeOf(integerObject);
System.out.println("int size: " + primitiveIntSize + " bytes");
System.out.println("Integer size: " + integerObjectSize + " bytes");
}
}
上記のコードは、オブジェクトのサイズを測定するためにサードパーティのライブラリ MemoryUtil を使用していることに注意してください。オブジェクトのメモリ使用量を測定するには、Java Object Layout (JOL) などのツールを使用する必要があります。この例では、int のサイズは 4 バイトである必要があり、Integer はオブジェクトであり、追加のオーバーヘッドも含まれているため、4 バイトより大きくする必要があります。
概要: メモリ使用量の観点から見ると、int はプリミティブ データ型であるためメモリ使用量が少なくなりますが、Integer はオブジェクトであるため追加のオーバーヘッドが必要です。ただし、場合によっては、コレクション クラスに格納するためにオブジェクトに変換する必要がある int などの Integer オブジェクトを引き続き使用します。