web-dev-qa-db-ja.com

Long vs Integer、long vs int、何をいつ使用しますか?

APIがlongまたはLongまたはintまたはIntegerを使用していることがありますが、その決定がどのように行われるかわかりませんか?

いつ何を選ぶべきですか?

LongObjectlong形式であり、Integerintのオブジェクト形式です。

long64ビット を使用します。 intは32ビットを使用するため、最大±20億(-231 +231-1)。

longなど、intから継承したメソッドを使用する必要がある場合を除き、Objectおよびhashcodeを使用する必要があります。 Java.util.collectionsメソッドは通常、ボックス化(Object- wrapped)バージョンを使用します。これは、すべてのObjectで機能する必要があり、intlongなどのプリミティブ型はObjectではないためです。

もう1つの違いは、longintpass-by-valueであるのに対し、LongIntegerpass-by-すべての非プリミティブJavaタイプと同様に、参照値。したがって、LongまたはIntegerを変更できる場合(JNIコードを使用せずに不変である場合)、どちらかを使用する別の理由があります。

最後の違いは、LongまたはIntegernullになる可能性があることです。

172
Borealid

プリミティブ型ではできないことがいくつかあります。

  • null値を持っている
  • それらで同期する
  • これらをジェネリッククラスの型パラメーターとして使用し、それに関連します。
  • Objectsと連携するAPIにそれらを渡します

これらのいずれかが必要でない限り、必要なメモリが少ないため、プリミティブ型を選択する必要があります。

25
  • デフォルトでは、数値を保持するときにintを使用します。
  • intの範囲が小さすぎる場合は、longを使用します
  • longの範囲が小さすぎる場合は、BigIntegerを使用します
  • 数値をオブジェクトとして処理する必要がある場合(たとえば、それらをCollectionに入れる場合、nullを処理する場合など)、代わりにInteger/Longを使用します。
18
Joachim Sauer

intは32ビット整数です。 longは64ビット整数です。どちらを使用するかは、使用する数値の大きさに依存します。

intおよびlongはプリミティブ型であり、IntegerおよびLongはオブジェクトです。プリミティブ型はより効率的ですが、オブジェクトを使用する必要がある場合があります。たとえば、Javaのコレクションクラスはオブジェクトでのみ機能するため、整数のリストが必要な場合は、たとえばList<Integer>にする必要があります(intListを直接使用することはできません)。

12
Jesper

Integerは符号付き32ビット整数型です

  • Intと表記
  • サイズ=32 bits (4byte)
  • 範囲の整数を保持できます-2,147,483,648 to 2,147,483,647
  • デフォルト値は


Longは符号付き64ビット整数型です

  • Longと表記
  • サイズ=64 bits (8byte)
  • 範囲の整数を保持できます-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
  • デフォルト値は0L


変数の使用が32ビットの範囲に収まる場合は、Intを使用します。それ以外の場合は、longを使用します。通常、科学計算や長い精度を必要とするようなものにはlongが使用されます。 (例:piの値)。

一方を選択する例は、YouTubeの場合です。最初に、ビデオビューカウンターをintとして定義しました。人気のビデオ。 Intカウンターはその範囲を超える値を格納できないため、YouTubeはカウンターを64ビット変数に変更し、最大9,223,372,036,854,775,807ビューまでカウントできるようになりました。データを理解し、64ビット変数が32ビット変数の2倍のメモリを使用するように適合するタイプを選択します。

2

表現するのに32ビットを超える可能性がある非常に長い数値を使用する場合は、longを使用して、奇妙な動作が発生しないようにすることができます。

Java 5から、インボックス機能とアウトボックス機能を使用して、intとIntegerの使用を完全に同じにすることができます。それはあなたができることを意味します:

int myInt = new Integer(11);
Integer myInt2 = myInt;

インとアウトのボクシングにより、追加の変換なしでintとIntegerを切り替えることができます(LongDoubleShortも同じです)

常にintを使用できますが、Integerには、整数を使用した複雑な操作(Integer.parseInt(String)など)を行うのに役立つヘルパーメソッドが含まれています

1

a)オブジェクトクラス「Long」とプリミティブタイプ「long」 (少なくともJavaでは)

b)プリミティブ型にはさまざまな(不明確な)メモリサイズがあります。

Java-すべて明確: https://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html

  • バイト、char .. 1B .. 8b
  • short int .. 2B .. 16b
  • int .. .. .. .. 4B .. 32b
  • long int .. 8B .. 64b

C ..ただ混乱: https://en.wikipedia.org/wiki/C_data_types

  • 短い.. .. 16b
  • int .. .. .. 16b ... wtf?!?!
  • 長い.. .. 32b
  • 長い長い.. 64b ..混乱! :-/
0
Franta