私はこれらの違いを理解しようとしています。たとえば、何かを int として宣言してから、これを Integer に入れた数値と比較できますか? また、なぜJavaには2つあるのですか。これらを組み合わせてみませんか?
それぞれがどのように使用されているかを示す 3 ~ 4 行のコード例を示して、誰かが私を助けてくれますか?
私はこれらの違いを理解しようとしています。たとえば、何かを int として宣言してから、これを Integer に入れた数値と比較できますか? また、なぜJavaには2つあるのですか。これらを組み合わせてみませんか?
それぞれがどのように使用されているかを示す 3 ~ 4 行のコード例を示して、誰かが私を助けてくれますか?
int
プリミティブはオブジェクトではありません。配列はプリミティブを許可します:
int[] array = new int[10];
しかし、ジェネリックはそうではありません:
List<int> //won't compile
これが、最近ラッパー クラスを使用する主な理由です。また、期待されるInteger
場所で使用できます。オプション性を実装したい場合は、Object
最終的に値Integer
を持つことができます。null
その矛盾に対処する言語がいくつかあることに注意してください。c#では値型があり、scala Int
クラスではクラスから拡張されAnyVal
、通常のオブジェクトは拡張されますAnyRef
(これらは両方とも から拡張されAny
ます)。
Java での型のボックス化を参照してください。Java 9以降、それらをまったく同じにするという話があります。
int
型とIntegerクラスは別の型です。int
プリミティブをInteger
オブジェクトと直接比較することはできません。intValue
オブジェクトから取得する必要がありInteger
ます。int
であり、それらにプリミティブを使用することはできません。Integer
したがって、ラッパーが必要になります。整数はオブジェクトですが、int はプリミティブ型です。基本的に、オブジェクトは参照によって渡されますが、プリミティブは値によって渡されます。また、割り当て元も異なります。
Java で言えば、オブジェクトには機能があります。次のような呼び出し:
Integer.toString()
大丈夫ですが:
int.toString()
ではありません。
int はプリミティブ、Integer はクラスです。あなたは言うことはできませんArrayList<int>
が、あなたは言うことができますArrayList<Integer>
。
Java のすべてのプリミティブ型には、対応するクラス (オブジェクトから派生したクラス) があります。たとえば、Boolean、Long などです。これは「ボクシング」と呼ばれます。説明は、たとえばこちらを参照してください。