Я можу чітко пояснити, що 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");
}
}
Фактичний результат
Результат приходить до he Hi There 100 замість очікуваного результату (у випадку, якщо і sb, і я є змінними об'єктами) 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;
}
}