Ist es besser zu schreiben?
int primitive1 = 3, primitive2 = 4;
Integer a = new Integer(primitive1);
Integer b = new Integer(primitive2);
int compare = a.compareTo(b);
oder
int primitive1 = 3, primitive2 = 4;
int compare = (primitive1 > primitive2) ? 1 : 0;
if(compare == 0){
compare = (primitive1 == primitive2) ? 0 : -1;
}
Ich denke, die zweite ist besser, sollte schneller und mehr Speicher optimiert werden. Aber sind sie nicht gleich?
Für die Leistung ist es in der Regel am besten, den Code so einfach und klar wie möglich zu gestalten. Dies wird häufig gut funktionieren (da die JIT diesen Code am besten optimiert). In Ihrem Fall dürften die einfachsten Beispiele auch die schnellsten sein.
Ich würde entweder tun
int cmp = a > b ? +1 : a < b ? -1 : 0;
oder eine längere Version
int cmp;
if (a > b)
cmp = +1;
else if (a < b)
cmp = -1;
else
cmp = 0;
oder
int cmp = Integer.compare(a, b); // in Java 7
int cmp = Double.compare(a, b); // before Java 7
Es ist am besten, ein Objekt nicht zu erstellen, wenn Sie dies nicht benötigen.
Die erste ist die beste Leistung.
Wenn Sie sicher sind, dass Sie keinen Überlauf bekommen, können Sie verwenden
int cmp = a - b; // if you know there wont be an overflow.
schneller wirst du nicht.
Verwenden Sie Integer.compare(int, int)
. Versuchen Sie nicht, Ihren Code zu optimieren, es sei denn, Sie können ein Leistungsproblem nachweisen.
Darf ich einen dritten vorschlagen?
((Integer) a).compareTo(b)
Das Umschließen eines Int-Elements in ein Integer-Objekt kostet etwas Speicher, der Unterschied wird jedoch nur in sehr seltenen Fällen (Speicherbedarf) (Array mit 1000 Elementen) auftreten. Ich werde die Verwendung des neuen Integer (int a) -Konstruktors auf diese Weise nicht empfehlen. Das reicht aus:
Integer a = 3;
Zum Vergleich gibt es Math.signum (double d).
compare= (int) Math.signum(a-b);
Sie sind schon ints. Warum nicht einfach die Subtraktion verwenden?
compare = a - b;
Beachten Sie, dass Integer.compareTo () nicht unbedingt auch nur -1, 0 oder 1 zurückgibt.
Für pre 1.7 würde ich sagen, dass ein Äquivalent zu Integer.compare (x, y) ist:
Integer.valueOf(x).compareTo(y);
Wenn Sie Java 8 verwenden, können Sie Comparator mit dieser Methode erstellen:
Comparator.comparingInt(i -> i);
wenn Sie mit einer umgekehrten Bestellung vergleichen möchten:
Comparator.comparingInt(i -> -i);
Wenn Sie nur einen logischen Wert benötigen (wie fast immer), hilft Ihnen der folgende Einzeiler:
boolean ifIntsEqual = !((Math.max(a,b) - Math.min(a, b)) > 0);
Und es funktioniert sogar in Java 1.5+, vielleicht sogar in 1.1 (ich habe keine). Bitte sagen Sie uns, ob Sie es in 1.5- testen können.
Dieses wird auch tun:
boolean ifIntsEqual = !((Math.abs(a-b)) > 0);
Sie können dies über die Bitmanipulation tun, etwa wie folgt:
(~a - ~b) >>> 31 | -((a - b) >>> 31)
public static void main(String[] args)
{
int a = 107;
int b = 106;
check(a, b);
a = 106;
b = 106;
check(a, b);
a = 106;
b = 107;
check(a, b);
}
public static void check(int a, int b)
{
System.out.println((~a - ~b) >>> 31 | -((a - b) >>> 31));
}
AUSGABE:
1
0
-1