Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Método substring cria um novo objeto String?

Referente ao código abaixo:

String s1 = "s1";
String s2 = s1.substring(0, 2);
System.out.println(s1==s2);
System.out.println(s1.equals(s2));

s1.substring(0,2) retorna uma nova String (no caso a String s1 inteira). Está sendo criado um novo objeto String? Se está sendo criado um novo objeto, como é possível comparar s1 == s2 e dar true?

1 resposta
solução!

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!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software