APIがlong
またはLong
またはint
またはInteger
を使用していることがありますが、その決定がどのように行われるかわかりませんか?
いつ何を選ぶべきですか?
Long
はObject
のlong
形式であり、Integer
はint
のオブジェクト形式です。
long
は 64ビット を使用します。 int
は32ビットを使用するため、最大±20億(-231 +231-1)。
long
など、int
から継承したメソッドを使用する必要がある場合を除き、Object
およびhashcode
を使用する必要があります。 Java.util.collections
メソッドは通常、ボックス化(Object
- wrapped)バージョンを使用します。これは、すべてのObject
で機能する必要があり、int
やlong
などのプリミティブ型はObject
ではないためです。
もう1つの違いは、long
とint
がpass-by-valueであるのに対し、Long
とInteger
はpass-by-すべての非プリミティブJavaタイプと同様に、参照値。したがって、Long
またはInteger
を変更できる場合(JNIコードを使用せずに不変である場合)、どちらかを使用する別の理由があります。
最後の違いは、Long
またはInteger
がnull
になる可能性があることです。
プリミティブ型ではできないことがいくつかあります。
null
値を持っているObject
sと連携するAPIにそれらを渡しますこれらのいずれかが必要でない限り、必要なメモリが少ないため、プリミティブ型を選択する必要があります。
int
を使用します。int
の範囲が小さすぎる場合は、long
を使用しますlong
の範囲が小さすぎる場合は、BigInteger
を使用しますCollection
に入れる場合、null
を処理する場合など)、代わりにInteger
/Long
を使用します。int
は32ビット整数です。 long
は64ビット整数です。どちらを使用するかは、使用する数値の大きさに依存します。
int
およびlong
はプリミティブ型であり、Integer
およびLong
はオブジェクトです。プリミティブ型はより効率的ですが、オブジェクトを使用する必要がある場合があります。たとえば、Javaのコレクションクラスはオブジェクトでのみ機能するため、整数のリストが必要な場合は、たとえばList<Integer>
にする必要があります(int
でList
を直接使用することはできません)。
Int
と表記32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
と表記64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
変数の使用が32ビットの範囲に収まる場合は、Int
を使用します。それ以外の場合は、long
を使用します。通常、科学計算や長い精度を必要とするようなものにはlongが使用されます。 (例:piの値)。
一方を選択する例は、YouTubeの場合です。最初に、ビデオビューカウンターを
int
として定義しました。人気のビデオ。Int
カウンターはその範囲を超える値を格納できないため、YouTubeはカウンターを64ビット変数に変更し、最大9,223,372,036,854,775,807ビューまでカウントできるようになりました。データを理解し、64ビット変数が32ビット変数の2倍のメモリを使用するように適合するタイプを選択します。
表現するのに32ビットを超える可能性がある非常に長い数値を使用する場合は、longを使用して、奇妙な動作が発生しないようにすることができます。
Java 5から、インボックス機能とアウトボックス機能を使用して、intとIntegerの使用を完全に同じにすることができます。それはあなたができることを意味します:
int myInt = new Integer(11);
Integer myInt2 = myInt;
インとアウトのボクシングにより、追加の変換なしでintとIntegerを切り替えることができます(Long
、Double
、Short
も同じです)
常にint
を使用できますが、Integer
には、整数を使用した複雑な操作(Integer.parseInt(String)
など)を行うのに役立つヘルパーメソッドが含まれています
a)オブジェクトクラス「Long」とプリミティブタイプ「long」 (少なくともJavaでは)
b)プリミティブ型にはさまざまな(不明確な)メモリサイズがあります。
Java-すべて明確: https://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html
C ..ただ混乱: https://en.wikipedia.org/wiki/C_data_types