05.16 Java高级编程——覆盖equals时最容易被忽略的问题

在基本运算符中, == 扮演一个重要的角色,


而跟它相似的还有个 equals()方法,这两个的区别是什么你知道么。


更多编程知识请 关注我, 欢迎点赞 欢迎评论


“equals“在编程语言中都是必不可少的,那么在Java语言中我们应该如何谨慎的实现呢?如何做到没有问题呢?

在编程过程中,我们经常遇到对两个对象进行对比,那么一开始最早我们是使用== 进行对比,原因很简单,一开始我们只需要对基本类型的数据进行对比。然后,随着需求和我们知识的拓展,我们的对比的对象就不是那么简单了,逐渐到了string 然后再到比较复杂的其他自定义对象。


于是我们出现了一个需求,手写equals 方法。

equals方法来自于Object类:

Java高级编程——覆盖equals时最容易被忽略的问题

可以看到在Object类中equals比较的两个实例是否是引用相等的,这个代码告诉我们对比的时候我们只需要考虑了这个对象是否就是它自己,可是如果我们要实现一个“值是否相等”的equals方法呢?。何时需要重写equals方法呢?顶级类只提供了引用是否相等,如果你需要自己实现一个逻辑是否相等,此时则需要重写equals方法,例如String类。

Java高级编程——覆盖equals时最容易被忽略的问题

当在重写equals方法时,应该遵守以下约定:

Java高级编程——覆盖equals时最容易被忽略的问题

Java高级编程——覆盖equals时最容易被忽略的问题

那么我们来分析一下源码String中的equals方法:

Java高级编程——覆盖equals时最容易被忽略的问题

String中equals方法的实现实际上就是书中给我们的重写equals的一些诀窍:

Java高级编程——覆盖equals时最容易被忽略的问题

Java高级编程——覆盖equals时最容易被忽略的问题


分享到:


相關文章: