Questão: wrappers e variáveis

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ê?

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

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

[]'s

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

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.

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”).

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”);