Eventuali duplicati:
Inconsistent behavior on java's ==
Integer wrapper objects share the same instances only within the value 127?java == per intero
ho trovato il seguente comportamento == per gli oggetti interi e non riesco a capire esso. (Sono ben consapevole che si dovrebbe utilizzare è uguale per tali confronti, ma sto studiando per OCPJP ...)
In breve, == funziona come previsto per il 1000, ma non per 10.
L'ex frammento di codice è:
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2) System.out.println("different objects");
if(i1.equals(i2)) System.out.println("meaningfully equal");
e si comporta come ci si aspetterebbe:
different objects
meaningfully equal
quest'ultimo però:
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4) System.out.println("same object");
if(i3.equals(i4)) System.out.println("meaningfully equal");
ha il seguente output:
same object
meaningfully equal
Qualcuno può spiegare perché questo sta accadendo?
BTW Provate con '-XX: + AggressiveOpts' e il primo si comporterà come la seconda, come aumenta la dimensione della cache Integer. ;) –