Igualdade em Strings

3 respostas
diego2005

Pessoal, sei que pra comparar Strings devemos usar o método equals, mas por que o seguinte código imprime true???

public class TesteString
{
    public static void main(String[] args)
    {
        String str1 = "Java";
        String str2 = "Java";
        String obj1 = "Java";
        String obj2 = "Java";

        System.out.println(str1 == str2);
        System.out.println(str1 == obj1);
        System.out.println(str1 == "Java");
        System.out.println(obj1 == obj2);
    }
}

Todos imprimem true....por que???

3 Respostas

Dieval_Guizelini

Este é um problema comum para os iniciantes.

Tecnicamente, quando você executa a instrução

String v = "Java";

a vm deveria criar um novo objeto. O fato é que ele cria um cache para as “constantes” deste tipo de instrução e por isso o endereço delas são sempre os mesmas.

Lembre que o operador == para objetos compara endereços de memória.

Faça um teste como este:

String a = casa;

String b = new String(casa);

String c = new String( a );

os valores retornados de a==b e a==c serão falso.

Dieval_Guizelini

Complementando…

tem um artigo aqui no guj sobre o assunto:

http://www.guj.com.br/java.tutorial.artigo.103.1.guj.

e na sun:

http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#101083

:wink:

diego2005

Opa…valeu pela explicação.

Criado 24 de setembro de 2006
Ultima resposta 24 de set. de 2006
Respostas 3
Participantes 2