我们应该总是覆盖相等的吗?
2022-09-03 05:19:25
在编写自己的类时,是否总是需要重写?equals(Object o)
如果我不这样做,它会自动检查所有字段是否相同?还是它只是检查两个变量是否指向同一个对象?
在编写自己的类时,是否总是需要重写?equals(Object o)
如果我不这样做,它会自动检查所有字段是否相同?还是它只是检查两个变量是否指向同一个对象?
仅当有意义时才覆盖。但显然,如果你覆盖,你需要确保契约没有被破坏,这意味着如果两个对象相等,它们必须具有相同的哈希代码。equals()
equals()
hashcode()
什么时候有意义?何时是不够的。该方法基本上归结为引用标识,这意味着两个对象是同一个对象,因此:Object.equals()
a.equals(b) iff q == b
数字是一个明显的例子,当它有意义时,因为它应该等于另一个。Integer(10)
Intger(10)
另一个示例可能是当您表示数据库记录时。假设您有具有唯一整数 ID 的学生记录,那么只需比较 ID 字段即可实现 equals。