Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Romper bucle while con String

Hola!
Acabo de empezar a programar en java y me ha surgido una pequeña duda, por que no funciona el siguiente código? Si antes del while a la variable "entrada" le asigno el string "fin" si que lo coge y no inicia el ciclo del while, pero por que una vez iniciado no me acepta el "fin" que le introduzco por consola ?

----------------------------------------------------------------------------------------------------
public static void main(String[] args) {

Scanner lectura = new Scanner(System.in);
String entrada = "";

while (entrada != "fin") {

System.out.println("Escribir fin para romper el bucle");
entrada = lectura.next();
System.out.println(entrada);
}

}
-------------------------------------------------------------------------------------------------

Gracias y un saludo!

noviembre 6, 2011 | Unregistered CommenterSiete

Prueba así, verás que te funciona:
while (!"fin".equals(entrada))
Hay una diferencia entre usar el == y el equals con String, u otros objetos, que acabas de descubrir ;)

noviembre 6, 2011 | Unregistered Commenterchoces

== y != sirven para ver si dos objetos son "el mismo objeto" (esto ya lo aprenderás más adelante).

Para saber si dos String contienen los mismos caracteres se usa el método equals:

if(texto1.equals(texto2)){
//Son iguales
}else if(!texto1.equals(texto2)){
//Son diferentes
}

El por qué funciona cuando le asignas "fin" directamente es por lo mismo que he dicho antes pero tiene un poco de miga :)

Existe una diferencia entre hacer:

String entrada = "fin";
String otraEntrada = "fin";

y

String entrada = new String("fin");
String otraEntrada = new String("fin");

En el primer caso, la máquina virtual sólo crea un objeto en memoria y apunta a él tanto en entrada como en otraEntrada, por lo que al compararlos con == es true.

En el segundo caso, se crean dos objetos diferentes (dos objetos en memoria), por eso es false.

noviembre 7, 2011 | Registered CommenterUnai Valle