4

私のコードには、10000 のような多くの最終値がありますif(number1 == number2)

intまたはIntegerそのような数値を使用する方が良いですか?

4

7 に答える 7

8

あなたの場合、使用しますint

一般的に、プリミティブ値のいずれかを適切に使用できる状況にある場合、ほとんどの場合、次のプリミティブ値が優先されます。

  • それらは潜在的にメモリ効率が高い
  • == は常に確実に使用できますが、クラスInteger型の場合はそうではありません.equals()。必要なものを確実に取得するには、使用する必要があります。詳しくはこちらをご覧ください。

最近では、メモリ要件はそれほど問題ではありませんが、2 番目に大きな落とし穴があります。これは、知らないと多くのバグが発生する可能性があるためです (特に、==期待どおりに動作する場合があるため)。 、およびそれ以外の場合 - その意味では「信頼できる」バグではありません。)

于 2012-06-12T14:13:35.697 に答える
5

Integers はオブジェクトであるため、メモリ内でより多くのスペースを占有します。Integerメソッドを使用したり、オブジェクトである必要があるものを使用したことがない場合、はプリミティブ型であるintため、メモリ効率が高くなります。int

大まかに言えば、最新のコンピューターのメモリ量を考えると、おそらく問題にはならないでしょう。安全でも害はありません。

==for Integersを使用している場合は、参照が同じかどうかを確認していることに注意してください。Integerオブジェクトの場合、メソッドequals()が優先されます。

于 2012-06-12T14:13:28.200 に答える
3

プリミティブ型であるため、int を使用します。本格的なラッパー オブジェクトを選択する代わりに、プリミティブ型を選択する方がメモリ効率が高いため、常により良いオプションです。

于 2012-06-12T14:13:26.560 に答える
2

intかどうかはあまり関係ありませんInteger。Java では、autoboxingを使用することで非常に交換可能です。

ただし、それらをコレクションに保存する場合は違いがあります。コレクションはオブジェクトのみを受け入れます。つまり、 を使用する必要がありますInteger

使用することに決め、Integerそれらを比較したい場合は、使用しないでください==。代わりに、compareToメソッドまたは メソッドを使用してequalsください。

于 2012-06-12T14:15:05.150 に答える
2

参照を比較しているので、int を使用することをお勧めします。「==」を使用して整数オブジェクト (または Float、Double、Short、Character、Byte、Long、BigDecimal...) が等しいかどうかを比較しないでください。プリミティブ形式の数値を比較します。つまり、int、short、long、double で動作します。

整数を比較したい場合は、compareTo() メソッドを使用します。

于 2012-06-12T14:18:02.253 に答える
1

定数の場合は、を使用します。定数の場合intと同様に、値を取得できる必要があるだけです。この場合、付属する他のすべてIntegerは冗長です。

整数をパラメーターとして渡す必要があるInteger場合は、パラメーター値のオプションをもう1つ取得するので便利ですnull(つまり、パラメーターが無効な場合、または値がない場合)。

于 2012-06-12T14:29:50.880 に答える
1

可能な場合は int を使用し、必要な場合は Integer を使用します

値が null の場合でも使用できますIntegerが、メソッドを使用してそれらcompareToEquals比較する必要があります。

値を null にできない場合は、 を使用intしてください。そうすれば、従来の演算子==>=<などを使用した読みやすいコードが得られます。

 // int primitive, easy to handle
 int a = 5;
 int b = 5;
 int c = null; // Compile error, can't have null primitive values
 if(a == b) // True
 if(a > b) // False
 if(a >= b) // True

 // Integer, more complicated:
 Integer A = new Integer(5);
 Integer B = new Integer(5);
 Integer c = null; // Work

 if(A == B) // False, they are not the same objects
 if(A.equals(B)) // True, same value

 if(A > B) // Compile error...
 if(A.compareTo(B)>0) // A > B, the int version is more readable
 if(A.compareTo(B)>=0) // A >= B, the int version is more readable
于 2012-06-12T14:27:40.053 に答える