Comparando Strings

6 respostas
malves_info

Uma simples duvida!
É correto eu comparar uma String desta forma? pode dar algum erro? ou esta certo.

if(sexo.trim().equals(sexo) == sexo.trim().equals("M"))
            System.out.println("Bem Vindo: "+nome);

:?:

6 Respostas

peczenyj

Não é correto: vc precisa usar o metodo equals()

o operador ==, para objetos, verifica apenas se são instâncias do mesmo objeto.

sexo.trim().equals(sexo) == sexo.trim().equals(“M”)

é o mesmo que

a = sexo.trim().equals(sexo)
b = sexo.trim().equals(“M”)

sendo que a e b serão boolean.

então vc esta vendo se true == true ou false == false

observe que

sexo.equals(sexo)

é sempre true mas,

sexo.trim().equals(sexo)

nem sempre é.

fique com isto em mente: sexo.trim().equals(“M”)

que por enquanto está mais do que bom :wink:

rafaelglauber

veja http://www.guj.com.br/java.tutorial.artigo.103.1.guj um ótimo artigo sobre a Classe String, se não tiver entendido o que o amigo falou nesse tutorial fala sobre o assunto.

malves_info

Realmente o que vc falou é correto e mais simples…
O engraçado é que por exemplo eu atribuir sexo = “F” antes deste IF ele compara corretamente como se realmente não fosse igual. Mas vou utilizar desta forma para compara quando for igual.

Mas uma duvida amigo, quando eu quiser dizer que ele não é igual á (!=) como faço neste caso??

diego2005

Pra verificar se as Strings são diferentes você pode fazer o seguinte:

String s1 = "str1";
String s2 = "str2"

if (! str1.equals(str2)) {
    System.out.println("Strings diferentes.");
}

T+

ViniGodoy
malves_info:
O engraçado é que por exemplo eu atribuir sexo = "F" antes deste IF ele compara corretamente como se realmente não fosse igual.

Isso é porque o Java tem um cache de todas as strings criadas como literais (isto é, criadas diretamente):

Faça o teste:

String s1 = "Vinicius";
String s2 = "Vinicius";

//O java aproveitou a mesma referência por causa do cache.
//Isto é, s1 e s2 estão no mesmo lugar na memória
System.out.println("Strings " + (s1 == s2 ? "Iguais" : "Diferentes"));

String s3 = new String("Vinicius"); //Forçamos a criação de uma String nova
System.out.println("Strings " + (s1 == s3 ? "Iguais" : "Diferentes"));

Não há garantias sobre esse cache. A sun pode parar de usa-lo ou pode amplia-lo. Uma mesma VM pode destruir strings do cache a qualquer momento, desde que não hajam mais referências para ela num dado momento.

Então, via de regra, melhor comparar com equals. O equals compara conteúdo e não endereço de memória:
System.out.println("Strings " + (s1.equals(s3) ? "Iguais" : "Diferentes"));
malves_info

Blza!!..
Vlw pela ajuda de todos!!!

Criado 26 de outubro de 2007
Ultima resposta 26 de out. de 2007
Respostas 6
Participantes 5