概述
我们在写程序时,往往有时Java类库中的equals方法不能满足我们的需求。这时,就需要我们自己来定义equals方法。
在写自定义equals方法之前,我满先来看两个类库中已经写好的equals方法。
一、Object.equals()
很简单的一个方法,因为是Object的方法,所以对所有对象都适用。
public boolean equals(Object obj) {
return (this == obj);
}
二、String.equals()
private final char value[];
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
我们来看String类重写equals方法时,都做了些什么。
首先是判断是不是自己,如果是自己好办,直接返回true就完事了。
然后如果不是自己,先看看传入的参数是否为String类型,不是返回false就完事。
再然后都是String类型了,在比较长度是否相等,每个字符的值是否相等,全都相等就返回true。
三、自定义equals()
通过模仿String.equals(),我们来写Person.equals()。
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean equals(Object another) {
//先判断是不是自己,提高运行效率
if (this == another)
return true;
//再判断是不是Person类,提高代码的健壮性
if (another instanceof Person) {
//向下转型,父类无法调用子类的成员和方法
Person anotherPerson = (Person) another;
//最后判断类的所有属性是否相等,其中String类型和Object类型可以用相应的equals()来判断
if ((this.getName().equals(anotherPerson.getName())) && (this.getAge() == anotherPerson.getAge()))
return true;
} else {
return false;
}
return false;
}
}
}
在覆盖equals()时,我们在自定义equals内部调用了Object.equals()和String.equals()。
四、自动生成的equals()
考虑到实际中我们可能会经常覆写equals(),因此eclipse为我们提供自动生成的equals()。
操作过程如上图所示,读者可自行操作查看自动生成的代码。
转载于:https://www.cnblogs.com/skisqibao/p/9567584.html
最后
以上就是顺利大神为你收集整理的覆盖/重写Object类中equals方法一、Object.equals()二、String.equals()三、自定义equals() 四、自动生成的equals()的全部内容,希望文章能够帮你解决覆盖/重写Object类中equals方法一、Object.equals()二、String.equals()三、自定义equals() 四、自动生成的equals()所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复