Puedo dejar en claro que Integer (y otros de su credo como Float, Short, etc.) son inmutables mediante un código de muestra simple:
Código de muestra
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 actual
El resultado llega a Hi There 100 en lugar del resultado esperado (en caso de que sb e i sean objetos mutables) Hi There 1000
Esto muestra que el objeto creado por i en main no está modificado, mientras que el sb está modificado.
Entonces StringBuilder demostró un comportamiento mutable pero no Integer.
Entonces Integer es inmutable. Por lo tanto probado
Otro código sin solo 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;
}
}