2
respostas

Comparação de objetos String

Por que este código retorna true? se estou comparando dois objetos em posições do heap diferentes?

class Teste{
    public static void main(String[] args){
        String a = "asd";
        String b = "asd";

        if(a == b){
            System.out.println("igual");
        } else {
            System.out.println("diferente");
        }
    }
}

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas

David porque ela te retorna true? porque a variavel a e b tem o mesmo valor, e no seu if, você ta comparando se a é igual a b. Então é por isso que está te retornando true

Oi David,

Isto é uma particularidade avançada da JVM. O Java usa um conceito chamado String interning, que basicamente guarda numa pool da memória, de maneira única, todas as strings distintas do seu programa. Sempre que ele encontra uma string literal, como é o caso de a e b, ele sempre devolve essa mesma posição da memória.

Se você explicitamente instanciar duas strings, naturalmente esse comportamento não funciona mais, pois ele de fato irá alocar nova memória.

public class Teste {
    public static void main(String[] args){
        String a = new String("abc");
        String b = new String("abc");
        System.out.println(a == b); //false
    }
}

É possível você pedir que o Java guarde qualquer string nessa pool com o método .intern(), que verifica se a string já está lá e devolve a mesma referência sempre.