I seguenti compila codice (con Java 8):Quando si usa == per un primitivo e un valore in scatola, è autoboxing fatto, o è fatta unboxing
Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
Ma che cosa fa?
Unbox i1
:
boolean compared = (i1.intvalue() == i2);
o scatola i2
:
boolean compared = (i1 == new Integer(i2));
Così ci si confronta con due Integer
oggetti (di riferimento) o due int
variabili per valore?
noti che per alcuni numeri il confronto riferimento produrrà il risultato corretto perché la classe Integer mantiene una cache interna di valori tra -128
per 127
(si veda anche il commento di TheLostMind). Questo è il motivo per cui ho usato 1000
nel mio esempio e perché specificamente chiedo informazioni sull'unboxing/boxing e non sul risultato del confronto.
Sicuramente se è stato eseguito questo codice e l'output stampato è possibile determinare da soli. – Scruffy
La domanda non è esattamente identica a quella utilizzata per contrassegnarla come duplicata :) – TheLostMind
Controlla questa [domanda - regole di box automatico] (http://stackoverflow.com/questions/12559634/java-autoboxing-rules). Nella sua risposta, chiaramente, questo caso è stato coperto. –