Я могу прояснить, что Integer (и другие его кредо, такие как Float, Short и т. Д.) Неизменны с помощью простого образца кода:
Образец кода
public class Test{
public static void main(String... args){
Integer i = 100;
StringBuilder sb = new StringBuilder("Hi");
Test c = new Test();
c.doInteger(i);
c.doStringBuilder(sb);
System.out.println(sb.append(i)); //Expected result if Integer is mutable is Hi there 1000
}
private void doInteger(Integer i){
i=1000;
}
private void doStringBuilder(StringBuilder sb){
sb.append(" there");
}
}
Фактический результат
Результатом будет он Hi There 100 вместо ожидаемого результата (в случае, если оба объекта sb и i являются изменяемыми объектами) Hi There 1000
Это показывает, что объект, созданный i в main, не изменяется, тогда как sb изменяется.
Итак, StringBuilder продемонстрировал изменчивое поведение, но не Integer.
Итак, целое число неизменяемо. Следовательно, доказано
Другой код без целого числа:
public class Test{
public static void main(String... args){
Integer i = 100;
Test c = new Test();
c.doInteger(i);
System.out.println(i); //Expected result is 1000 in case Integer is mutable
}
private void doInteger(Integer i){
i=1000;
}
}