logo

Como comparar dois objetos em Java

Objeto Java class é a superclasse de todas as classes Java. Todas as classes Java implementam a classe Object por padrão. A classe Java Object fornece dois métodos importantes para compare dois objetos em Java , ou seja é igual a() e código hash() método. Nesta seção, aprenderemos como é igual a() e código hash() método funciona. Junto com isso, também aprenderemos como comparar dois objetos em Java com exemplos adequados.

Java fornece os dois métodos da classe Object para comparar os objetos:

  • Método Java igual()
  • Método Java hashCode()

Método Java igual()

O é igual a() O método da classe Object compara a igualdade de dois objetos. Os dois objetos serão iguais se compartilharem o mesmo endereço de memória.

Sintaxe:

número para string java
 public boolean equals(Object obj) 

O método analisa um objeto de referência como um parâmetro. Retorna verdadeiro se os objetos forem iguais, caso contrário, retorna falso.

Também é possível que um objeto seja igual a outro objeto, então o método equals() segue o relação de equivalência para comparar os objetos.

    Reflexivo:Se x é uma referência não nula, a chamada de x.igual(x) deve retornar verdadeiro.Simétrico:Se as duas referências não nulas forem x e y, x.igual(y) retornará verdadeiro se e apenas se y.é igual a (x) retornar verdadeiro .Transitivo:Se as três referências não nulas forem x, você , e z, x.igual(z) também retornará verdadeiro se x.igual(y ) e y.igual(z) ambos retornam verdadeiro .Consistente:Se as duas referências não nulas forem x e e , a chamada múltipla de x.igual(y) retorna constantemente verdadeiro ou falso. Não fornece nenhuma informação usada na comparação.
  • Para qualquer referência não nula x, x.igual(nulo) retorna falso.

Em resumo, para qualquer referência não nula, digamos x e e , ele retornará verdadeiro se e somente se ambas as referências se referirem ao mesmo objeto.

Lembrar: Quando substituímos o método equals(), é necessário substituir o método hashCode(). A substituição segue a convenção do método hashCode() que afirma que o objeto igual deve ter código hash igual.

Exemplo de método equals()

No exemplo a seguir, criamos construtor do Dobro e Longo classe e passa os valores correspondentes, como um argumento armazenado em seus objetos, respectivamente.

Depois disso, na primeira instrução println, invocamos o método equals() e analisamos um objeto y como um parâmetro que compara os objetos x e y. Ele retorna falso porque x contém o valor duplo e y mantém o valor longo que não é igual.

Da mesma forma, na segunda instrução println, invocamos o método equals() e analisamos o mesmo valor que no construtor da classe Double. Ele retorna verdadeiro porque o objeto da classe dupla, ou seja, x contém o mesmo valor que passamos no método equals().

ObjectComparisonExample.java

finalizar a compra com git
 public class ObjectComparisonExample { public static void main(String[] args) { //creating constructor of the Double class Double x = new Double(123.45555); //creating constructor of the Long class Long y = new Long(9887544); //invoking the equals() method System.out.println('Objects are not equal, hence it returns ' + x.equals(y)); System.out.println('Objects are equal, hence it returns ' + x.equals(123.45555)); } } 

Saída:

 Objects are not equal, hence it returns false Objects are equal, hence it returns true 

Diferença entre o operador == e o método equals()

Em Java , o == operador compara se duas referências são idênticas ou não. Considerando que a é igual a() método compara dois objetos.

Os objetos são igual quando eles têm o mesmo estado (geralmente comparando variáveis). Os objetos são idêntico quando compartilham a identidade de classe.

Por exemplo, a expressão obj1==obj2 testa a identidade, não a igualdade. Enquanto a expressão obj1.equals(obj2) compara igualdade.

Método Java hashCode()

Em Java, o código hash é um valor inteiro assinado de 32 bits. É um ID exclusivo fornecido por JVM para o objeto Java. Cada objeto Java está associado ao código hash. O código hash é gerenciado por uma estrutura de dados baseada em hash, como HashTable, HashSet, etc.

Lembrar: Quando substituímos o método equals(), é necessário substituir também o método hashCode().

Sintaxe:

 public int hashCode() 

Ele retorna um valor de código hash gerado aleatoriamente do objeto que é exclusivo para cada instância. O valor gerado aleatoriamente pode mudar durante as diversas execuções do programa.

O contrato geral para hashCode é:

java está vazio
  • Quando invocado mais de uma vez durante a execução de uma aplicação, o método hashCode() retornará consistentemente o mesmo código hash (valor inteiro). Observe que o objeto não deve ser modificado.
  • Se os dois objetos forem iguais de acordo com o método equals(), então invocar o método hashCode() nesses dois objetos deverá produzir o mesmo valor inteiro.
  • Não é necessário que, se os dois objetos forem desiguais de acordo com o método equals(), então invocar o método hashCode() nesses dois objetos possa produzir valores inteiros distintos. Isso significa que pode produzir o mesmo código hash para ambos os objetos.

Exemplo de método hashCode()

No exemplo a seguir, criamos duas classes Funcionário.java e HashCodeExample.java .

Na classe Employee, definimos dois campos regno do tipo int e nome do tipo String. Depois disso, criamos um construtor da classe Employee e passamos esses dois campos como parâmetro.

Para realizar a comparação de objetos, criamos uma classe separada chamada HashCodeExemplo . Nesta classe, criamos duas instâncias da classe Employee, ou seja, emp1 e emp2 . Depois disso, invocamos o método hashCode() usando objetos. Armazenamos o valor do código hash na variável a e b , respectivamente.

Funcionário.java

 public class Employee { private int regno; private String name; //constructor of Employee class public Employee(int regno, String name) { this.name = name; this.regno = regno; } public int getRegno() { return regno; } public void setRegno(int Regno) { this.regno = regno; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

HashCodeExample.java

string multilinha js
 public class HashcodeExample { public static void main(String[] args) { //creating two instances of the Employee class Employee emp1 = new Employee(918, 'Maria'); Employee emp2 = new Employee(918, 'Maria'); //invoking hashCode() method int a=emp1.hashCode(); int b=emp2.hashCode(); System.out.println('hashcode of emp1 = ' + a); System.out.println('hashcode of emp2 = ' + b); System.out.println('Comparing objects emp1 and emp2 = ' + emp1.equals(emp2)); } } 

Saída:

 hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false 

Substituindo o método equals()

Podemos substituir o método equals() da seguinte maneira se quisermos fornecer implementação própria.

 //overriding equals() method @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; return this.getRegno() == ((Employee) obj). getRegno(); } 

O trecho de código acima mostra que dois funcionários serão iguais se estiverem armazenados no mesmo endereço de memória ou se tiverem o mesmo nome. Quando executamos o programa (HashCodeExample.java) com o trecho de código acima, obtemos a seguinte saída.

Saída:

 hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true