Comparando jTextField

10 respostas
R

Olá pessoal.

Devo estar cometendo um erro muito bobo neste trecho de código.

Por que diabos esta comparação não funciona?
Sai sempre por else (“Não funcionou”).

String UUUF = "A";
        jTextField1.setText("A");
        
        if ( jTextField1.getText() == UUUF  ){ 
            System.out.println("Funcionou ");    
        } else {
            System.out.println("NÃO Funcionou");    
        }
        System.out.println(jTextField1.getText() + UUUF);        
        //Saída "AA"

Uso o sdk1.4.1_01.

Um abraço.

10 Respostas

C

Pq string vc compara utilizando o método equals(). O seu código deveria ser:

jTextField1.getText() .equals( UUUF )

R

É isso mesmo.

Eu até tinha visto este método.
Só que eu achei que era muito esquisito.
Porque se eu fizer UUUF == “A”, sendo UUUF um objeto String funciona e jTextField.getText() == “A”, não funciona.
Me pareceu uma incoerencia pois o getText() retorna um String?.

Valeu.
Um abraço.

B

Régis,

Leia o artigo aqui do GUJ
A classe java.lang.String
. Você irá entender melhor como ela funciona e porque algumas vezes a comparação com == de Strings iguais retorna verdadeiro e outras falso.

H

aproveitando a pergunta do nosso amigo…
e se quizesse comparar a String se ela fosse diferente, por exemplo diferente de vazio???
por exemplo para comparar se igual se usa:
if (jTextField1.getText().equals(""))

e pra quando eh diferente? procurei na APi não achei nenhum metodo…
como q faz?

F

Soh fazer a negacao:

if (!jTextField1.getText().equals(""))
R

Que coisa sinistra isso!

Eu não entendo nadinha de nada da JVM, mas isso me parece algo mal pensado ou um contorno em um problema estrutural… :frowning:

C

“Régis Steigleder”:
Que coisa sinistra isso!

Eu não entendo nadinha de nada da JVM, mas isso me parece algo mal pensado ou um contorno em um problema estrutural… :(

Nao tem nada de sinistro: quando vc usa ==, vc esta comparando duas referencias a objetos, e nao os objetos em si. Quando vc usa equals(), vc compara os objetos (ou o que quer que o programador tenha escrito no metodo equals() dele).

Sobre a negacao do equals, bom, uma aulinha qqer em um curso de logica em colegio tecnico/faculdade/SOS Computadores resolve :smiley:

D

“cv”:
“Régis Steigleder”:
Que coisa sinistra isso!

Eu não entendo nadinha de nada da JVM, mas isso me parece algo mal pensado ou um contorno em um problema estrutural… :(

Nao tem nada de sinistro: quando vc usa ==, vc esta comparando duas referencias a objetos, e nao os objetos em si. Quando vc usa equals(), vc compara os objetos (ou o que quer que o programador tenha escrito no metodo equals() dele).

O que o Carlos quis dizer é que usando “==” você acaba comparando se os endereços em que os objetos estão sendo alocados são os mesmos (e isso só retorna “true” quando você compara um objeto a ele mesmo). Quando você usa o método “equals”, a comparação é feita levando em conta valores que este objeto encapsula. Por exemplo:

public class User{
 
   private String username;
   private String password;

//getters e setters...

   public boolean equals(Object other){
        return (this.getUsername().equals(other.getUsername())) && (this.getPassword.equals(other.getPassword()));
   }
}
User a = new User();
a.setUsername("daniel");
a.setPassword("123");
User b = new User();
b.setUsername("daniel");
a.setPassword("123");
System.out.println(a.equals(b));

Neste caso, o método equals só vai retornar “true” se, e somente se, o valor das strings “username” e “password” forem iguais tanto para a instância “a” quanto para a instância “b”. E é isso. Lição do dia: compare primitivos usando “==” e objetos usando o método “equals”. :smiley:

R

É. Isto que o Daniel e o CV colocaram eu já havia entendido. :lol:
E valeu por que sempre se aprende um pouco mais. :wink:

Só que o sinistro que eu coloquei aqui era referente ao link para a “A classe java.lang.String” que a Dani postou pra mim, que obviamente fui lá pra ler.

Então é assim:
Se eu faço:
x += “A” a jvm cria nova instancia de x e eu não pedi pra instanciar x novamente só pedi pra que ele ganhasse novo valor.
É isso que eu achei sinistro, pois tá parecendo o M$Word “adivinhando” o que eu quero fazer… :smiley:
E vejam, atentos colegas, que não estou dizendo que é errado, só sinistro … :stuck_out_tongue:

Um abraço a todos e boa semana ! :wink:

C

x+=“A” tambem pode ser escrito como:

new StringBuffer(x).append(a).toString();

Faz muito mais sentido, nao? A diferenca eh soh o fato de usar uma sintaxe mais concisa para uma operacao tao corriqueira. Mas nunca se esqueca de que Strings em Java sao imutaveis. :wink:

Criado 18 de outubro de 2003
Ultima resposta 20 de out. de 2003
Respostas 10
Participantes 7