¿Ambito de la variable?

SportBoy
09 de Noviembre del 2004
a ver si alguien me ayuda... En este programa, no debería salir por la consola "CAMBIADO" y no "original" ??????? no se ke ocurre... :__(

public class prueba {
static void cambia(String s){
s=new String("CAMBIADO");
}

public static void main(String[] args) {
String s=new String("original");
cambia(s);
System.out.println(s);
}
}

maramonar
09 de Noviembre del 2004
porque no debería salir "CAMBIADO"????

asdf
09 de Noviembre del 2004
Te debe salir original.

EL PASO DE PARÁMETROS EN JAVA ES POR VALOR Y
NO POR REFERENCIA.

Mucha gente cree que el paso de parámetros en Java es por referencia. Puedes cambiar las propiedades
de un objeto pasado a un método pero no puedes
reasignarlo.

De forma que si en tu método en lugar de:
s= new String("Cambiado")

pones:
s="Cambiado"

la salida si debe ser Cambiado.

SportBoy
09 de Noviembre del 2004
dentro del metodo pongo s="Cambiado"
y sigue saliendo Original....


Alguna otra ayuda????

asdf
09 de Noviembre del 2004
Efectivamente, error mio, estamos hablando de
objetos String y no hace falta recordar que ...

LOS OBJETOS STRING EN JAVA SON INMUTABLES.
Un String nunca cambia en Java.

Cuando realizas:

s="Cambiado"

en realidad lo que la máquina virtual de java está
haciendo es crear un nuevo objeto String con el
valor "Cambiado" y asignarlo a la variable de
referencia s. Esta haciendo lo mismo que realizabas
tu en un primer momento, y como te comente
anteriormente esto no funciona en Java.

Lo que puedes hacer es devolver un String en el
método y recibirlo en el String creado en el main.

Saludos.