3.5 KiB
title | localeTitle |
---|---|
Checking for Equality | Verificando Igualdade |
Verificando Igualdade
Em Java, existem duas maneiras de verificar se duas variáveis são "mesmas": ==
e .equals()
. Esses dois métodos não funcionam da mesma maneira.
O operador ==
A operação básica de igualdade em Java, ==
como em var1 == var2
, verifica se var1
e var2
apontam para a mesma referência de objeto . Ou seja, se var1
for a mesma instância de uma classe na memória que var2
, então var1 == var2
é true.
No entanto, se var1
e var2
forem criados como duas instâncias separadas de uma classe (isto é, com a new
palavra-chave), então var1 == var2
será falso. Mesmo que os dois objetos contenham exatamente as mesmas propriedades e valores, a comparação ==
não passaria porque eles não estão apontando para o mesmo objeto na memória.
Para tipos de variáveis primitivas, como int
e double
, o operador ==
sempre pode ser usado para verificar a igualdade, pois seus valores são armazenados diretamente com a variável (em vez de como referência a outro slot na memória).
int var1 = 1;
int var2 = 1;
System.out.println(var1 == var2) // true
MyObject obj1 = new MyObject();
MyObject obj2 = obj1;
MyObject obj3 = new MyObject();
System.out.println(obj1 == obj2) // true
System.out.println(obj1 == obj3) // false
System.out.println(obj2 == obj3) // false
O método .equals()
A classe de Object
interna em Java, que todas as outras classes estendem automaticamente, contém vários métodos internos úteis. Um desses métodos é equals()
, que usa outro objeto como argumento e retorna se os dois objetos devem ser considerados "iguais" de acordo com a lógica relevante para essa classe.
A classe 'String' é um dos exemplos mais comuns de uma classe que substitui o método 'equals ()'. Ao comparar duas 'String's para igualdade, você precisa usar o método' equals () ', já que' == 'não funcionará como você espera.
String s1 = "Bob";
String s2 = "ob";
s2 = "B" + s2; //s2 now is also "Bob"
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
Quando você cria uma nova classe em Java, geralmente deseja substituir o método equals()
para fornecer uma maneira mais significativa de comparar dois objetos da mesma classe. Como este método é implementado é completamente para o julgamento do desenvolvedor.
Por exemplo, você pode decidir que duas Person
devem ser consideradas "iguais" se seu name
e data de dateOfBirth
forem iguais. Essa lógica seria implementada no método equals()
da sua classe Person
:
public class Person {
public String name;
public Date dateOfBirth;
public boolean equals(Person person) {
return this.name.equals(person.name) && this.dateOfBirth.equals(person.dateOfBirth);
}
}
A maioria das classes internas em Java, bem como as classes fornecidas por bibliotecas populares, implementarão o método equals()
maneira significativa.
Por exemplo, o java.util.Set
interface especifica que um Set
de equals()
método irá retornar true se "o objeto especificado é também um conjunto, os dois conjuntos têm o mesmo tamanho, e todos os membros do conjunto especificado está contido neste conjunto ".
No entanto, se uma classe não substituir a implementação equals()
padrão, será aplicada a implementação padrão, que simplesmente usa o operador ==
para comparar os dois objetos.