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");
}
}
}
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
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.
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”);