Em Java, o operador == compara a igualdade de referências, não o conteúdo real dos objetos. Para comparar o conteúdo de objetos, especialmente para strings, você deve usar o método equals(). Aqui estão exemplos de como testar igualdade entre strings e outros objetos usando == e equals():
Teste de Igualdade entre Strings:
String str1 = "Hello";
String str2 = new String("Hello");
String str3 = "Hello";
// Usando == para comparar referências
System.out.println("Usando == para comparar referências:");
System.out.println(str1 == str2); // false (referências diferentes)
System.out.println(str1 == str3); // true (referências iguais)
// Usando equals() para comparar conteúdo
System.out.println("\nUsando equals() para comparar conteúdo:");
System.out.println(str1.equals(str2)); // true (conteúdo igual)
System.out.println(str1.equals(str3)); // true (conteúdo igual)
Teste de Igualdade entre Objetos não String:
Integer num1 = 42;
Integer num2 = new Integer(42);
// Usando == para comparar referências
System.out.println("Usando == para comparar referências:");
System.out.println(num1 == num2); // false (referências diferentes)
// Usando equals() para comparar conteúdo
System.out.println("\nUsando equals() para comparar conteúdo:");
System.out.println(num1.equals(num2)); // true (conteúdo igual)
Notas Importantes:
- Para Strings:
- Use
equals()para comparar o conteúdo real das strings. - Evite usar
==para comparar strings, a menos que você esteja interessado nas referências exatas dos objetos.
- Para Outros Objetos:
- Mesmo para objetos não String, geralmente é preferível usar
equals()para comparações de conteúdo, especialmente quando se trata de classes personalizadas. - Alguns objetos, como
Integer, podem ser comparados usando==porque são geralmente cacheados em Java para valores pequenos (-128 a 127).
- String Pool:
- Strings literais em Java são colocadas no “string pool”. Isso pode levar a resultados surpreendentes ao usar
==para comparar strings literais.
Em resumo, ao comparar o conteúdo de objetos, especialmente para strings, use equals(). Reserve o uso do operador == para comparar referências de objetos, a menos que você esteja lidando com tipos primitivos ou tenha uma razão específica para comparar referências exatas.