While?

Porque o codgo abaixo entra no While quando a condição e falsa??

[code]import javax.swing.*;
public class Forca {
public Forca() {}
public static void main(String[] args) {
String z="",palavra="",resposta="";
int tam;
char x;
palavra=JOptionPane.showInputDialog(“escreva uma palavra”);
tam = palavra.length();
System.out.println(“a respontas deve conter: “+tam+” caracter”);
System.out.println(palavra);
System.out.println (resposta);
while (palavra!=resposta)

 {
 resposta=JOptionPane.showInputDialog("escreva uma Responsta");
 System.out.println	(resposta);
 for (int i=0;i<tam;i++)
 {
 if(resposta.charAt(i)== palavra.charAt(i))
 z+=resposta.charAt(i);
 else {
 z+='#';
}
}
System.out.println(z);
}

System.exit (0);
}    

}[/code]

E ae???

Para comprar Stringas vc deve usar o “.equals” e não “==”…

So não sei qual é a equivalencia do “!=” em relação ao “.equals”…

Espero ter ajudado…

Porque para comparar String (objetos) vc deve usar equals:

while (!palavra.equals(resposta))

Valeu

o codgo

while (!palavra.equals(resposta)) 

funcionou certinho [/quote]

a equivalencia do “!=” em relação ao ".equals seria o mesmo que fazer == só que != quer dizer diferente …

Então ficaria algo do tipo

if(1 != 2) -> isso quer dizer um é diferente de 2 ?

assim

System.out.print(1 == 2);

Isso mostra false, porque esta comparando se 1 é igual a 2, o que não e verdade.

System.out.print(1 != 2);

Isso mostra true, porque esta comparando se 1 é diferente de 2, o que é verdade.

== e != comparam valores, se vc usar isso para objetos, eles vão ver se a referencia das variaveis aponta para o mesmo objeto, se não apontar para o mesmo, o resultado vai ser diferente, mesmo que os atributos do objeto sejam iguais… por isso, para comparar objetos é usado um método que todo objeto tem chamado “equals”, esse método retorna um valor booleano dizendo se o objeto que invocou o método é igual ao objeto que foi passado pelo parâmetro:

System.out.print(obj1.equals(obj2));

Verifica se o obj1 é igual ao obj2, para saber se o obj1 é diferente do obj2 vc tem que usar um operador de negação, no caso o !

System.out.print(!obj1.equals(obj2));

Verifica se o obj1 é igual ao obj2, e depois inverte o resultado, logo se ele for igual (retornando true), vai negar e imprimir é false, e os objetos forem diferente (retornando false), vai negar e imprimir true… ou seja, o != para objetos é um equals com o operador ! na frente… que significaria algo do tipo: not equals.

Mas vcs precisam saber que como equals é um método, ele pode ser sobrescrito, o original dele la da classe Object é uma comparação de valor normal (obj1 == obj2), logo se vc criar uma classe normal que não sobrescreve equals, o seu equals vai ser simplesmente obj1 == obj2

é isso, da uma olhada nos operadores e no javadoc do método equals da classe Object…

flw