Posso deixar claro que Integer (e outras crenças como Float, Short etc) são imutáveis por um código de amostra simples:
Código de amostra
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");
}
}
Resultado atual
O resultado chega a ele Hi There 100 em vez do resultado esperado (no caso de sb e i serem objetos mutáveis) Hi There 1000
Isso mostra que o objeto criado por i em principal não foi modificado, enquanto o sb foi modificado.
Portanto, StringBuilder demonstrou comportamento mutável, mas não Integer.
Portanto, o inteiro é imutável. Provado Conseqüentemente
Outro código sem apenas inteiro:
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;
}
}