Questão: wrappers e variáveis

6 respostas
Grinvon

Uma questão legal:

public class vx {
	
	public static void main(String[] args) {
		
		Long l1 = new Long("1");
		Long l2 = new Long("1");
		Long l3 = new Long("32");
		
		
		if (l1 == l2) {
			System.out.println("l1 == l2");
			}
			
		if (l3 == l1) {
			System.out.println("l3 == l1");
			
		}
		
		if (l1.equals(l3)) {
			System.out.println("l1 equals l3");
		}
		
		if (l1.equals(l2)) {
			System.out.println("l1 equals l2");
		}
	}
}

Qual será a saída e por quê?

6 Respostas

Ironlynx

Essa eh fácil…o wrapper de Long aceita um String no construtor,logo só os 2 últimos if funcionam para esse tipo de comparação(o conteúdo String dos wrappers).E no caso,somente o último servirá.Resp.: l1 equals l2

jgbt

concordo com o Ironlynx.
A comparação de conteudo de obj so vai funcionar no ultimo if.

[]'s

Rafael_Nunes

Só o último if, pois as variáveis de referência referenciam objetos diferentes, logo somente equals() vai ser verdadeiro.

V

E se fosse?

String a = "java";
String b = "java";

if (a == b) {
    System.out.println("a == b");
}

if (a == "java") {
   System.out.println("a == java");
}

É muito interessante. Tem a ver com a estratégia flyweight implementada pelo java. Ele usa uma instância só para todas as string construidas em tempo de compilação. Me corrigam se eu estiver errado, ele vai imprimir os dois textos.

elvishr

Acho q não vai imprimir nada…

São 2 objetos String diferentes, logo a <> b.

No segundo if para comparar as strings deveria ser a.equals(“java”).

A

Engano seu elvishr…
Vai imprimir a==b e depois a == java.
No caso de String declarada dessa maneira não funciona como todos os outros tipos de objeto.
Só não ia imprimir nada se pelo menos uma das 2 tivesse assim:
String a = new String(“java”);

Criado 24 de abril de 2004
Ultima resposta 30 de abr. de 2004
Respostas 6
Participantes 7