El compilador autoboxes valores primitivos, esto significa que
Integer value = 6;
se compilará como
Integer value = Integer.valueOf(6);
Integer.valueOf devolverá un ejemplo entero con el valor dado. En su caso, i
ahora hará referencia al entero (6) en lugar del entero (5), el entero (5) objeto no cambiará.
Para ver esto, puede hace el siguiente
Integer i = new Integer(5);//assign new integer to i
Integer b = i;//b refences same integer as i
i = 6;//modify i
System.out.println(i +"!="+b);
Esto imprimirá 6!=5
, si la instancia número entero había sido modificado sería imprimir 6!=6
lugar.
Para aclarar esto, solo se pretende mostrar cómo una asignación a Entero solo modifica la referencia y no altera la instancia de Entero. Como el usuario @KNU señala que no prueba ni muestra la inmutabilidad de Integer, hasta donde puedo decir, la inmutabilidad solo está indirectamente dada por la falta de métodos de modificación en su API y el requisito de que las instancias devueltas por Integer.valueOf tengan que estar en caché para un cierto rango
Casi - efectivamente lo convierte en 'Integer.valueOf (6)'. Consulte esto para obtener más información: http://marxsoftware.blogspot.com/2010/08/subtle-nuance-of-new-keyword-with.html –
Vaya. My Bad :-) No me había molestado en buscar exactamente a qué se traducía. – drekka