equals 方法的详细用法
equals
方法是 Java 中用于比较两个对象是否“相等”的方法,属于 Object
类。因为所有类都直接或间接继承自 Object
,所以每个类都有 equals
方法。
以下是对 equals
方法的详细讲述:
1. equals
的定义
equals
方法定义在 java.lang.Object
类中:
- 默认实现是比较两个对象的内存地址(引用地址),只有当两个引用指向同一个对象时才返回
true
。 - 通常会被子类(如
String
、Integer
等)重写,用于比较实际的值是否相等。
2. equals
的基本用法
(1)用于比较基本对象
(2)用于字符串比较
String
类重写了 equals
方法,用于比较字符串的内容是否相同:
(3)用于包装类比较
包装类(如 Integer
、Double
等)也重写了 equals
方法,用于比较值是否相等:
3. equals
的使用场景
(1)基本对象的引用比较
如果没有重写 equals
,它默认比较引用地址是否相同。
(2)集合中的对象比较
在集合中,如 List
和 Set
,会使用 equals
方法来判断元素是否重复。例如:
(3)自定义类的值比较
对于自定义类,如果需要比较对象的内容,而非引用地址,通常需要重写 equals
方法。
4. 重写 equals
方法
(1)标准实现
在重写 equals
方法时,需要遵守以下规则:
- 自反性:
x.equals(x)
必须返回true
。 - 对称性:
x.equals(y)
与y.equals(x)
必须一致。 - 传递性:如果
x.equals(y)
和y.equals(z)
为true
,则x.equals(z)
也必须为true
。 - 一致性:多次调用
x.equals(y)
的结果必须一致。 - 与
null
比较:任何对象与null
比较必须返回false
。
(2)示例代码
假设有一个 Person
类,包含 name
和 age
两个字段,重写 equals
方法如下:
使用示例:
5. 与 ==
的区别
equals |
== |
---|---|
比较的是对象的内容(通常需要重写)。 | 比较的是对象的内存地址(引用地址)。 |
用于判断两个对象是否“值相等”。 | 用于判断两个引用是否指向同一个对象。 |
示例:
6. equals
方法的注意事项
(1)比较时避免 NullPointerException
使用 equals
时,最好确保调用方不为空。如果不确定,可以使用常见的 常量在前
写法:
(2)与 hashCode
一起重写
当重写 equals
方法时,通常也需要重写 hashCode
方法,否则可能导致集合操作出现问题。例如:
- 在
HashSet
或HashMap
中,equals
和hashCode
必须一致。
7. 常见实现类的 equals
行为
(1)String
类
比较字符串的内容:
(2)Integer
类
比较数值是否相等:
(3)ArrayList
和 HashSet
比较集合中的元素是否相等:
总结
equals
方法用于判断两个对象是否相等,默认实现是比较引用地址。- 通常需要在自定义类中重写,用于比较实际值。
- 与
==
不同,equals
更适合用于值比较。 - 在集合框架中广泛应用,需要与
hashCode
方法配合重写以保证一致性。
__EOF__

本文作者:258333
本文链接:https://www.cnblogs.com/258-333/p/18616408.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/258-333/p/18616408.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)