Sé que en Java, todo se pasa por valor. Pero para los objetos, es el valor de la referencia al objeto que se pasa. Esto significa que a veces un objeto puede cambiarse a través de un parámetro, por lo que, supongo, la gente dice: Nunca modifique parámetros.Pasa por "Valor de referencia"? Alguna aclaración necesaria
Pero en el siguiente código, ocurre algo diferente. s
en changeIt()
no cambia cuando vuelvas a main()
:
public class TestClass {
static String str = "Hello World";
public static void changeIt(String s) {
s = "Good bye world";
}
public static void main(String[] args) {
changeIt(str);
System.out.println(str);
}
}
supongo - y me gustaría la confirmación - que cuando usted dice s = "something"
es igual o equivalente a decir String s = new String("something")
. ¿Es por esto que s
no cambia? ¿Se le asigna localmente un objeto completamente nuevo que se descarta una vez que sale de changeIt()
?
He visto este tipo de pregunta/respuesta antes y * todavía * siento que necesito una revisión. +1 – BlackVegetable
No cambia porque las cadenas en Java son objetos inmutables. – anio
@anio No, esa no es la razón por la cual este código en particular no cambia la cadena. Sería el mismo comportamiento para cualquier objeto, inmutable o no (ya que está haciendo una tarea, no invocando ningún método en el objeto recibido) – nos