Dúvida no retorno de Objetos[RESOLVIDO]

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.

Vixi kra sua pergunta é tema de certificação…
Você tem um objeto String com um valor “Teste”, ao usar o metodo equals vc comprar o valor desses objetos, isso só é possivel afirma por causa que vc esta usando a classe String. Pois se vc estive usando qualquer outra classe ate msm não seria possivel, ao menos que você sobreescrve-se o método equals,. Pois o equals padrão faz a comparação do endenreço de memório da JVM.
Essa compraração é feito com o objeto do tipo Object, ele simplesmente compara o endereço de memória, o retorno q vc tem ai dos Object é justamente o endereço de memória na JVM

Mas se o retorno do método public static Object testandoRetornoMetodo2() é sempre o mesmo objeto, então as duas referências deveria armazenar o mesmo endereço de memória. Então pq o resultado do teste retorna que são objetos diferentes?

Então…
na realidade vc cria um novo objeto com o new…
cada vez q vc faz isso é criado um novo objeto na JVM é por isso a diferença…
para vc retornar o msm objeto sempre… vc precisa criar um singleton

http://pt.wikipedia.org/wiki/Singleton

Agora entendi cara. Valeu!