Dúvida sobre comportamento de Strings

2 respostas Resolvido
C

Olá, sou desenvolvedor .Net e estou estudando java na intenção de desenvolver para Android, mas eu peguei algo interessante que me gerou uma duvida e gostaria de saber o porque de retornar os seguintes valores em java.

//Em Java 
- false
- true
- true
- true

//Em .Net
- true
- true
- true
- true

String valor1 = new String("teste");
	String valor2 = new String("teste");
	
	if(valor1 == valor2)
	{
		System.out.println(true);
		
	}
	else
	{
		System.out.println(false);
		
	}
	
	if(valor1.equals(valor2))
	{
		System.out.println(true);
		
	}
	else
	{
		System.out.println(false);
		
	}
	
	
	String valor3 = "teste";
	String valor4 = "teste";
	
	if(valor3 == valor4)
	{
		System.out.println(true);
		
	}
	else
	{
		System.out.println(false);
		
	}
	
	if(valor3.equals(valor4))
	{
		System.out.println(true);
		
	}
	else
	{
		System.out.println(false);
		
	}

2 Respostas

igomes
Solucao aceita

Dois new, são dois objetos, eles não são o mesmo, mas podem ser equivalentes/iguais.
Podemos fazer a alusão a gêmeos, eles são a mesma pessoa ? Não, porém podem ser iguais.
Portando == vindo de dois new mesmo que com o mesmo valor false
Portando == vindo de duas strings com o mesmo valor de forma literal true
Agora quando você declara uma string de forma literal a jvm retorna a mesma instância por isso nesse caso o true.

Existe um método na String intern, ele vê se a string está no pool e se não tiver ele add se não me engano
Dá uma olhada na doc
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

C

Então neste caso, o “teste” na forma literal se comportaria como Objeto e na segunda inclusão seria adicionado a referência, certo?

Criado 30 de setembro de 2016
Ultima resposta 30 de set. de 2016
Respostas 2
Participantes 2