equals
要正确使用List的contains()、indexOf()这些方法,放入的实例必须正确覆写equals()方法
编写equals
- 自反性:非
null,x.equals(x)必须返回true; - 对称性:非
null,如果x.equals(y)为true,则y.equals(x)也必须返回true; - 传递性:非
null,如果x.equals(y)为true,y.equals(z)也为true,那么x.equals(z)也必须为true; - 一致性:非
null,只要x和y状态不变,则x.equals(y)总是一致地返回true或者false; - 对
null的比较:即x.equals(null)永远返回false;
如果Person有好几个引用类型的字段,上面的写法就太复杂了。要简化引用类型的比较,我们使用Objects.equals()静态方法:
public boolean equals(Object o) {
if (o instanceof Person p) {
return Objects.equals(this.name, p.name) && this.age == p.age;
}
return false;
}
小结
在List中查找元素时List的实现类通过元素的equals()方法比较两个元素是否相等,因此,放入的元素必须正确覆写equals()方法,Java标准库提供的String、Integer等已经覆写了equals()方法;
编写equals()方法可借助Objects.equals()判断。
如果不在List中查找元素,就不必覆写equals()方法
43万+

被折叠的 条评论
为什么被折叠?



