Il seguente codice mi è sembrato molto confuso poiché forniva due output diversi. Il codice è stato testato su jdk 1.7.Come funzionano gli operatori! = E == su Integers in Java?
public class NotEq {
public static void main(String[] args) {
ver1();
System.out.println();
ver2();
}
public static void ver1() {
Integer a = 128;
Integer b = 128;
if (a == b) {
System.out.println("Equal Object");
}
if (a != b) {
System.out.println("Different objects");
}
if (a.equals(b)) {
System.out.println("Meaningfully equal.");
}
}
public static void ver2() {
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2) {
System.out.println("Equal Object");
}
if (i1 != i2){
System.out.println("Different objects");
}
if (i1.equals(i2)){
System.out.println("Meaningfully equal");
}
}
}
uscita:
[ver1 uscita]
Diversi oggetti
Significativamente uguali.[ver2 uscita]
oggetto uguale
Significativamente pari
Perché == e! = Test produce risultati diversi per ver1() e ver2() per lo stesso numero molto inferiore al numero intero. MAX_VALUE? Si può concludere che il controllo == di numeri superiori a 127 (per classi wrapper come Integer come mostrato nel codice) è totalmente inutile?
Questo perché il meccanismo di autoboxing memorizza nella cache e riutilizza lo stesso oggetto per i valori nell'intervallo -128 - 127. Questo è un duplicato di una domanda precedente. – aioobe
@quixoto: vedere la mia risposta di modifica :) – BoltClock
http://stackoverflow.com/questions/1700081/why-does-128-128-return-false-but-127-127-return-true-when-converting-to -integ –