puedo dejar claro que entero (y otra de su credo como flotador, corto, etc) son inmutables por simple código de ejemplo:
Código de ejemplo
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 real
El resultado viene a él Hola Hay 100 en lugar de resultado esperado (en el caso de ambos sb y siendo i objetos mutables) Hola allí 1000
Esto muestra el objeto creado por i en el principal no se modifica , mientras que sb se modifica.
Así que StringBuilder demostró un comportamiento mutable pero no entero.
So Integer es inmutable.Por lo tanto Probadas
Otro código sin sólo números enteros:
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;
}
}
La clase es inmutable, pero el autoboxing está haciendo que las cosas funky sucedan: http://stackoverflow.com/questions/3085332/comparison-between-variables-pointing-to-same-integer-object – birryree
Gracias, boxeo fue la palabra clave Necesitaba google :) –
Estás confundiendo inmutable con un valor final o constante. –