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.