Boa tarde, Hugo! Como vai?
Então, s1 == s2
resulta em true
pois o retorno não é um novo objeto! A classe String
trabalha visando otimizar a memória, sendo assim, no código abaixo a saída é true
:
String a1 = "a";
String a2 = "a";
System.out.println(a1 == a2); // true.
Isso ocorre pois se já tiver uma String "a"
na memória então ela a reutiliza! O algoritmo de reutilização é tão bom que até mesmo partes de strings já criadas podem ser reutilizados! Afinal de contas, imagina o que aconteceria se o Java criasse uma nova string "a"
sempre que utilizassemos essa letra! Essa otimização tem base no fato de a classe String
criar objetos imutáveis e também na utilização do padrão de projeto flyweight!
Obs.: Um adendo importante é que também há exceções à regra e algumas pegadinhas como visto nessa aula!
Para saber mais:
https://www.geeksforgeeks.org/flyweight-design-pattern/
https://stackoverflow.com/questions/11189155/is-javas-string-intern-a-flyweight
Pegou a ideia? Qualquer coisa é só falar!
Grande abraço e bons estudos, meu aluno!