默认情况下,当我们在Java中比较同一类的两个实例时,将检查它们是否都引用同一对象。
因此,无论所包含信息的相似性如何,两个实例可能完全不同。举个例子:
public class PersonDetails {
private Integer age;
private String firstName;
private String lastName;
private String nationality;
public PersonDetails(Integer age, String firstName, String lastName, String nationality) {
this.age = age;
this.firstName = firstName;
this.lastName = lastName;
this.nationality = nationality;
}
}
如果我们按以下方式运行主类,
public class Main {
public static void main(String[] args){
PersonDetails first = new PersonDetails(18,"John","Doe","American");
PersonDetails second = new PersonDetails(18,"John","Doe","American");
if(first.equals(second)){
System.out.println("Equal");
}
else {
System.out.println("Not equal");
}
}
}
输出将是:不等于
为了检查对象内部值的相等性,我们将需要在类中重写equals方法。
public class PersonDetails {
private Integer age;
private String firstName;
private String lastName;
private String nationality;
public PersonDetails(Integer age, String firstName, String lastName, String nationality) {
this.age = age;
this.firstName = firstName;
this.lastName = lastName;
this.nationality = nationality;
}
//Overriding equals() to compare PersonDetails objects
@Override
public boolean equals(Object o){
//If object is compared to itself then return
if(o == this){
return true;
}
//Check if o is an instance of PersonDetails or not
if(!(o instanceof PersonDetails)){
return false;
}
// typecast o to PersonDetails so that we can compare data
PersonDetails personDetails = (PersonDetails) o;
// Compare the values inside the objects and return accordingly
return Integer.compare(age,personDetails.age) == 0
&& firstName.compareTo(personDetails.firstName) == 0
&& lastName.compareTo(personDetails.lastName) ==0
&& nationality.compareTo(personDetails.nationality) == 0;
}
}
如果再次运行主类,则
输出将是:等于
学习更多Java相关知识可以加入我的十年Java学习园地,答疑解惑,技术交流,对学习Java有帮助。