Le compilateur autoboxes valeurs primitives, cela signifie que
Integer value = 6;
seront compilés comme
Integer value = Integer.valueOf(6);
Integer.valueOf renvoie une instance nombre entier ayant la valeur donnée. Dans votre cas, i
référencera maintenant l'entier (6) au lieu de l'entier (5), l'objet entier (5) lui-même ne changera pas.
Pour voir ce que vous pouvez faire suivant
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);
Ce imprimera 6!=5
, si l'instance entière avait été modifié, il imprimerait 6!=6
à la place.
Pour clarifier cela, cela ne sert qu'à montrer comment une affectation à Integer ne modifie que la référence et ne modifie pas l'instance entière elle-même. Comme l'utilisateur @KNU souligne qu'il ne prouve pas ou ne montre pas l'immutabilité d'Integer, autant que je peux dire l'immutabilité est seulement indirectement donnée par l'absence de méthodes de modification dans son API et l'exigence que les instances renvoyées par Integer.valueOf doivent être mis en cache pour une certaine plage.
Presque - cela le transforme efficacement en 'Integer.valueOf (6)'. Voir ceci pour plus d'informations: http://marxsoftware.blogspot.com/2010/08/subtle-nuance-of-new-keyword-with.html –
Oups. Mon mauvais :-) Je n'avais pas vraiment pris la peine de chercher exactement ce que cela traduisait. – drekka