我是靠谱客的博主 顺利大神,这篇文章主要介绍覆盖/重写Object类中equals方法一、Object.equals()二、String.equals()三、自定义equals() 四、自动生成的equals(),现在分享给大家,希望可以做个参考。

我们在写程序时,往往有时Java类库中的equals方法不能满足我们的需求。这时,就需要我们自己来定义equals方法。

在写自定义equals方法之前,我满先来看两个类库中已经写好的equals方法。

一、Object.equals()

很简单的一个方法,因为是Object的方法,所以对所有对象都适用。

复制代码
1
2
3
4
public boolean equals(Object obj) { return (this == obj); }

二、String.equals()

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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()。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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() 四、自动生成内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部