Java中重写equals方法有哪些潜在陷阱?

2026-05-28 08:000阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1935个文字,预计阅读时间需要8分钟。

Java中重写equals方法有哪些潜在陷阱?

重写Java对象类的equals方法封装equals方法请遵守约定什么情况下要覆盖equals方法易于违反的对称性不易察觉的递归性质覆盖equals请遵守通用约定看似封装equals方法实际上来看似乎是一件平凡的事

重写java object类的equals方法

  • 覆盖equals方法请遵守约定
  • 什么情况下要覆盖equals方法
  • 容易违反的对称性
  • 不易察觉的传递性

覆盖equals请遵守通用约定

似乎覆盖equals方法看起来似乎是一件平常甚至极其简单的事情,
但是有许多覆盖方式会导致错误,并且会表现出超出预期的行为,
而有可能数小时也无法找到错误的位置。(比如说把参数改成了非Object类型)

1. 类的每一个实例在本质上都是唯一的

( 从内存的角度来讲是这样的),对于代表活动而不是值(value)的类来说更是如此,
例如Thread。
Object提供equals的实现对于这些类来说是正确的行为

2. 类没有必要提供“逻辑相等”的测试功能

3.超类已经覆盖了equals方法,超类的行为对于子类来说同样也是合适的

4.类是私有的或者是包级私有的,可以确定它的equals方法永远不会被外界调用

如果非常想规避风险,可以覆盖equals方法,
来确保来自Object或者超类的方法永远不会被意外调用。

阅读全文

本文共计1935个文字,预计阅读时间需要8分钟。

Java中重写equals方法有哪些潜在陷阱?

重写Java对象类的equals方法封装equals方法请遵守约定什么情况下要覆盖equals方法易于违反的对称性不易察觉的递归性质覆盖equals请遵守通用约定看似封装equals方法实际上来看似乎是一件平凡的事

重写java object类的equals方法

  • 覆盖equals方法请遵守约定
  • 什么情况下要覆盖equals方法
  • 容易违反的对称性
  • 不易察觉的传递性

覆盖equals请遵守通用约定

似乎覆盖equals方法看起来似乎是一件平常甚至极其简单的事情,
但是有许多覆盖方式会导致错误,并且会表现出超出预期的行为,
而有可能数小时也无法找到错误的位置。(比如说把参数改成了非Object类型)

1. 类的每一个实例在本质上都是唯一的

( 从内存的角度来讲是这样的),对于代表活动而不是值(value)的类来说更是如此,
例如Thread。
Object提供equals的实现对于这些类来说是正确的行为

2. 类没有必要提供“逻辑相等”的测试功能

3.超类已经覆盖了equals方法,超类的行为对于子类来说同样也是合适的

4.类是私有的或者是包级私有的,可以确定它的equals方法永远不会被外界调用

如果非常想规避风险,可以覆盖equals方法,
来确保来自Object或者超类的方法永远不会被意外调用。

阅读全文