Boa tarde!
Estou lendo o livro Java Efetivo e no primeiro capítulo o autor recomenda que, sempre que possível, usar métodos estáticos para a fabricação de objetos ao invés de usar construtores. Ele cita ainda que uma das vantagens de se usar classes de fabricação é que o método estático sempre retorna o mesmo objeto. Curioso com relação a isso, resolvi fazer um teste. Tenho 2 classes.
[code]public class TestaRetorno {
public static String testandoRetornoMetodo() {
return new String("Teste");
}
public static Object testandoRetornoMetodo2() {
return new Object();
}
}[/code]
e
[code]public class Main {
public static void main(String[] args) {
String testeA = TestaRetorno.testandoRetornoMetodo();
String testeB = TestaRetorno.testandoRetornoMetodo();
Object testeC = TestaRetorno.testandoRetornoMetodo2();
Object testeD = TestaRetorno.testandoRetornoMetodo2();
if (testeA.equals(testeB)) {
System.out.println("Mesmo objeto");
System.out.println(testeA);
System.out.println(testeB);
} else {
System.out.println("Objeto diferente");
System.out.println(testeA);
System.out.println(testeB);
}
if (testeC.equals(testeD)) {
System.out.println("Mesmo objeto");
System.out.println(testeC);
System.out.println(testeD);
} else {
System.out.println("Objeto diferente");
System.out.println(testeC);
System.out.println(testeD);
}
}
}[/code]
Executando a classe principal, a saida no console é:
Mesmo objeto
Teste
Teste
Objeto diferente
java.lang.Object@19821f
java.lang.Object@addbf1
A minha dúvida é: Pq o método que retorna String sempre me devolve o mesmo objeto e o método que retorna Object sempre cria um nobo objeto? Os dois métodos tem implementações idênticas e divergem apenas quanto ao tipo de dado, logo o comportamente deveria ser igual.