[JAVA] Vergleiche Integer mit ==

Geschichte

Ich sah etwas Unangenehmes, als ich aufwachte. https://twitter.com/EclipseJavaIDE/status/1043084678339719168

Set<Short> set = new HashSet<>();
for (short i = 0; i < 10; i++) {
    set.add(i);
    set.remove(i - 1);
}
System.out.println(set.size());

Wählen Sie Ihre Wahl.

  1. Ausnahme mit entfernen → außer Frage 2.0 → Ich weiß es überhaupt nicht 3.1 → Erwartete falsche Antwort
  2. 10 → Richtige Antwort

Der Grund dafür ist, dass i -1 vom Typ int zum Typ Integer wechselt, sodass es nicht mit den Elementen von Set übereinstimmt, die vom Typ Short gehalten werden. .. ..

Grundlegende Bestätigung

System.out.println(1 == new Integer(1));
System.out.println(1 == Integer.valueOf(1));
System.out.println(new Integer(1) == new Integer(1));
System.out.println(Integer.valueOf(1) == Integer.valueOf(1));
System.out.println(new Integer(1) == Integer.valueOf(1));

Das Ergebnis ist wie folgt. true true false true false

Überprüfen Sie, ob Sie es wissen

System.out.println(Integer.valueOf(-129) == Integer.valueOf(-129));
System.out.println(Integer.valueOf(-128) == Integer.valueOf(-128));
System.out.println(Integer.valueOf(127) == Integer.valueOf(127));
System.out.println(Integer.valueOf(128) == Integer.valueOf(128));

Das Ergebnis ist wie folgt. false true true false

Es ist für die Effizienz. Die Schwellenwerte 127 und 128 sollten sich in den Systemeigenschaften geändert haben.

Auch grundlegende Bestätigung

System.out.println(1 + 1 == new Integer(1) + 1);
System.out.println(new Integer(1 + 1) == new Integer(1) + 1);

Das Ergebnis ist wie folgt. true true

Die rechte Seite ist vom Typ int.

Beyogen auf

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(1);
list.add(128);
list.add(128);
System.out.println(list.get(0) == list.get(1));
System.out.println(list.get(0) == list.get(1) + 0);
System.out.println(list.get(2) == list.get(3));
System.out.println(list.get(2) == list.get(3) + 0);

Das Ergebnis ist wie folgt. true true false true

Es ist sehr schön, dass sich das Ergebnis je nach Wertebereich ändert, wenn Sie +0 nehmen.

Wahrscheinlich funktioniert es nicht gut, weil ich die Spezifikationen verstehe und es nicht +0 ist, aber es sollte so sein. Außerdem weiß ich nicht, was es ist, aber ich sagte, dass ich +0 benötige, und selbst wenn ich einen Regressionstest durchgeführt habe, habe ich nicht bemerkt, dass sich das Verhalten geändert hat, als ich es in ungefähr 1, 2 oder 3 gemacht habe und die Bombe gesetzt wurde. ..

Ahaha.

Recommended Posts

Vergleiche Integer mit ==
Wenn Sie es wagen, Integer mit "==" zu vergleichen ...
Wie man ganze Zahlen mit Rubin überprüft
Vergleichen Sie Java 8 Optional mit Swift
Ganzzahliges Memo
Überladungsmethode mit Int- und Integer-Argumenten
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können