在Java中實現equals方法時應遵循的指南?
為了比較兩個物件,Object類提供了一個名為equals()的方法,此方法接受一個物件並將其與當前物件進行比較。
如果這兩個物件的引用相等,則返回true;否則,此方法返回false。
但是,此方法只有在兩個引用都指向同一個物件時才返回true。實際上,如果兩個物件的內容相等,它應該返回true。
示例
class Employee {
private String name;
private int age;
Employee(String name, int age){
this.name = name;
this.age = age;
}
}
public class EqualsExample {
public static void main(String[] args) {
Employee emp1 = new Employee("Jhon", 19);
Employee emp2 = new Employee("Jhon", 19);
//Comparing the two objects
boolean bool = emp1.equals(emp2);
System.out.println(bool);
Employee emp3 = emp1;
boolean bool2 = emp1.equals(emp3);
System.out.println(bool2);
}
}輸出
false true
重寫equals()方法
為了解決這個問題,您可以重寫equals()方法並比較兩個物件,但是,在Java中,要使兩個物件相等,它們必須處於等價關係中,這意味著equals方法應該檢查三個條件:
自反性 - a=a;
使用此方法將物件與其自身進行比較時,結果應為true。
對稱性 - 如果a=b,則b=a;
obj1.equals(obj2)的值應等於obj2.equals(obj1)。即,如果obj1.equals(obj2)返回true,則obj2.equals(obj1)必須返回true。
傳遞性 - 如果a=b,b=c,則a=c;;
如果obj1.equals(obj2)和obj2.equals(obj3)的值為true,則obj1.equals(obj3)的值必須為true。
在equals中將物件與當前物件進行比較時,需要檢查以下條件。
- 給定的物件不應為null。
if(obj == null ){
return false;
}- 給定的物件應該是當前類的物件。
if(this.getClass() != obj.getClass()){
return false;
}- 給定的物件應該等於當前物件。
if(this == obj){
return true;
}- 當前物件的例項變數應該等於給定物件的例項變數。
Employee emp = (Employee)obj;
if(this.name != emp.name|this.age != emp.age){
return false;
}示例
如果您在equal方法中重寫上面的示例,包括上面指定的條件,那麼它將檢查給定的物件是否等於當前的employee物件。
class Employee {
private String name;
private int age;
Employee(String name, int age){
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
if(obj == null ){
return false;
}
if(this.getClass() != obj.getClass()){
return false;
}
if(this == obj){
return true;
}
Employee emp = (Employee)obj;
if(this.name != emp.name||this.age != emp.age){
return false;
}
return true;
}
}
public class EqualsExample {
public static void main(String[] args) {
Employee emp1 = new Employee("Jhon", 19);
Employee emp2 = new Employee("Jhon", 19);
//Comparing the two objects
boolean bool = emp1.equals(emp2);
System.out.println(bool);
Employee emp3 = emp1;
boolean bool2 = emp1.equals(emp3);
System.out.println(bool2);
}
}輸出
true true
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP