Comparando Strings

3 respostas
Heartbreaker

Eu gostaria de saber a diferença entre esses dois códigos:

String palavra= "java"; if(comando=="java"){

String palavra= "java"; if(java.equals("java"){

Eu já todo o código preparado para fazer a verificação com “==”. Vou fazer os testes e percebo que mesmo quando as palavras são iguais ele da false. Com equals ele dá true.
Porém, fazendo esse pequeno teste acima, ele me retorna true, mas no meu código não. Gostaria de saber qual a diferença, já que nos dois modos eu estou comparando uma String instanciada e outra String em forma de palavra mesmo. Se o único modo for usando o equals eu vou ter que alterar o codigo completamente.
Gostaria de entender. Obrigado.

3 Respostas

Heartbreaker

Eu mesmo encontrei a resposta. Vou postar pois pode ajudar a tirar a dúvida de mais alguém.

http://tocadojava.blogspot.com/2011/09/porque-utilizar-equals-e-nao-para_26.html

A

Pelo que entendo é por causa do Heap. Um local protegido da JVM que armazena objetos. Fora do Heap ela armazena as referências a esses objetos e tipos primitivos (int, double, etc.). Quando você usa “==” você compara tipos primitivos (fora do Heap), quando você utiliza um método como o equals, você compara a estrutura completa de dois objetos (dentro do Heap). Como as Strings são objetos dentro do Heap você precisa usar o equals para comparação pois quando usa o “==” compara apenas a referência as mesmas.

Se você está usando um IDE, como o NetBeans é fácil refatorar todas as ocorrências de “==” para strings, caso não, use um Ctrl+F e faça uma busca em cada classe.

M

Heartbreaker:
Eu gostaria de saber a diferença entre esses dois códigos:

String palavra= "java"; if(comando=="java"){

String palavra= "java"; if(java.equals("java"){

Eu já todo o código preparado para fazer a verificação com “==”. Vou fazer os testes e percebo que mesmo quando as palavras são iguais ele da false. Com equals ele dá true.
Porém, fazendo esse pequeno teste acima, ele me retorna true, mas no meu código não. Gostaria de saber qual a diferença, já que nos dois modos eu estou comparando uma String instanciada e outra String em forma de palavra mesmo. Se o único modo for usando o equals eu vou ter que alterar o codigo completamente.
Gostaria de entender. Obrigado.

Olá,

existe um otimo artigo aqui no proprio GuJ explicando esta sua duvida.

http://www.guj.com.br/articles/103

Espero ter lhe ajudado.

Criado 3 de novembro de 2011
Ultima resposta 4 de nov. de 2011
Respostas 3
Participantes 3