Компилятор автоматически устанавливает значения примитивов, это означает, что
Integer value = 6;
будет скомпилировано как
Integer value = Integer.valueOf(6);
Integer.valueOf вернет экземпляр Integer с заданным значением.В вашем случае i
теперь будет ссылаться на Integer (6) вместо Integer (5), сам объект Integer (5) не изменится.
Чтобы увидеть это, вы можете сделать следующее:
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);
Это выведет 6!=5
, если целочисленный экземпляр был изменен, вместо него будет напечатано 6!=6
.
Чтобы прояснить это, нужно только показать, как присвоение Integer только изменяет ссылку и не изменяет сам экземпляр Integer.Как указывает пользователь @KNU, он не доказывает и не показывает неизменность Integer, насколько я могу судить, неизменность дается только косвенно из-за отсутствия методов модификации в его API и требования, предъявляемого к экземплярам, возвращаемым Integer.valueOf.кэшироваться для определенного диапазона.