68

書いたほうがいいですか?

int primitive1 = 3, primitive2 = 4;
Integer a = new Integer(primitive1);
Integer b = new Integer(primitive2);
int compare = a.compareTo(b);

また

int primitive1 = 3, primitive2 = 4;
int compare = (primitive1 > primitive2) ? 1 : 0;
if(compare == 0){
    compare = (primitive1 == primitive2) ? 0 : -1;
}

2 番目の方が優れていると思います。より高速で、よりメモリを最適化する必要があります。でも平等じゃない?

4

8 に答える 8

144

パフォーマンスのためには、通常、コードをできるだけ単純かつ明確にするのが最善であり、これは多くの場合、うまく機能します (JIT がこのコードを最適化するため)。あなたの場合、最も単純な例も最速である可能性があります。


私はどちらかをするだろう

int cmp = a > b ? +1 : a < b ? -1 : 0;

またはより長いバージョン

int cmp;
if (a > b)
   cmp = +1;
else if (a < b)
   cmp = -1;
else
   cmp = 0;

また

int cmp = Integer.compare(a, b); // in Java 7
int cmp = Double.compare(a, b); // before Java 7

必要がない場合は、オブジェクトを作成しないことをお勧めします。

パフォーマンスに関しては、最初のものが最適です。

オーバーフローが発生しないことが確実にわかっている場合は、使用できます

int cmp = a - b; // if you know there wont be an overflow.

これより速くなることはありません。

于 2012-02-05T15:33:03.157 に答える
63

を使用しInteger.compare(int, int)ます。また、パフォーマンスの問題があることを証明できない限り、コードをマイクロ最適化しようとしないでください。

于 2012-02-05T15:34:03.783 に答える
15

3番目を提案してもいいですか

((Integer) a).compareTo(b)  
于 2012-02-05T15:33:47.900 に答える
5

intプリミティブをIntegerオブジェクトにラップすると、いくらかのメモリが必要になりますが、その違いは非常にまれな(メモリ需要)場合(1000以上の要素を持つ配列)でのみ重要になります。この方法で新しいInteger(int a)コンストラクターを使用することはお勧めしません。これで十分です:

Integer a = 3; 

比較については、Math.signum(double d)があります。

compare= (int) Math.signum(a-b); 
于 2012-02-05T15:44:39.903 に答える
4

それらはすでに int です。なぜ減算を使用しないのですか?

compare = a - b;

Integer.compareTo() は、必ずしも -1、0、または 1 のみを返すとは限らないことに注意してください。

于 2015-05-27T22:57:21.013 に答える