While 'doidao'

2 respostas
rissato

Ola, tenho o complexo codigo abaixo:

import javax.swing.*;
public class Soma {
	public static void main( String args[] ) {
		String entrada="";
		while (entrada!="sair") {
			entrada =  JOptionPane.showInputDialog( "Digite uma palavra!" );
			if (entrada!="sair") {
				JOptionPane.showMessageDialog( null, "Voce digitou: " + entrada, "Resposta", JOptionPane.WARNING_MESSAGE );
			}
			
		}
	}
}

O problema eh q o loop while nao termina quando o usuario digita 'sair'. O mais estranho eh q se eu colocar uma linha:

entrada = "sair";

tudo funciona normalmente. Eu acho q deve ter algo a ver com o tipo de dado que o InputDialog retorna. Alguem ai pode me ajudar? Valew d+

2 Respostas

David

Você deve comparar Strings com equals, e não com ==. Isso porque equals() retorna true se o valor das Strings é igual, mesmo se forem objetos diferentes, e o == só retorna true se os dois objetos forem iguais.

entrada.equals("sair")
R

Kra, String em Java são “tricks”

Use:

if(!entrada.equals("sair"))

Ao invés de:

if(entrada!="sair")

A segunda expressão será verdadeira somente se as Strings foram inicializadas como literais. Exemplo:

String s1 = "Ola";
String s2 = "Ola";
if(s1 == s2)
   System.out.println("Verdadeiro");
else
   System.out.println("Falso");

Isso retornará verdadeiro, porquê as strings foram inicializadas como literais. Agora, se você inicializar as Strings sem literais, ou seja, por parâmetros do construtor, isso será falso. Exemplo:

String s1 = new String("Ola");
String s2 = new String("Ola");
if(s1 == s2)
   System.out.println("Verdadeiro");
else
   System.out.println("Falso");

Será falso, pois aqui se está comparando os manipuladores, e não os conteúdos. Sugestão: sempre use equals para String! Ele não depende da forma como as Strings foram inicializadas.

Criado 16 de maio de 2006
Ultima resposta 16 de mai. de 2006
Respostas 2
Participantes 3