常见问题:equals
在Java中实现默认方法的覆盖时,与仅将已实现的compareTo
方法与将独立逻辑写入equals方法相比,我应该担心什么?我注意到有人在另一个问题中提及,该问题foo.equals((String)null)
返回false而String.compareTo((String)null)
抛出NullPointerException
。是什么使这些不一致的结果成为理想的功能?
采样equals
方法:
@Override
public boolean equals(Object obj) {
if (obj != null && obj instanceof MyClass) {
MyClass msg = (MyClass)obj;
return this.compareTo(msg) == 0;
}
return false;
}
编辑:
引用可比文档
当且仅当e1.compareTo(e2)==
0对于C类的每个e1和e2具有与e1.equals(e2)相同的布尔值时,才可以认为C类的自然排序与equals一致。
null不是任何类的实例,即使e.equals(null)返回false,e.compareTo(null)仍应引发NullPointerException。
编辑:
经过进一步审查,我发现值得注意的是,可比文档也声明了以下内容:
实现者必须确保所有x和y的sgn(x.compareTo(y))==
-sgn(y.compareTo(x))。(这意味着x.compareTo(y)必须抛出异常,而y.compareTo(x)则抛出异常。)
因此,Ergo
null.compareTo(x)
显然会抛出NPE,因此也x.compareTo(null)
应该抛出NPE。对于平等,不一定是这种情况。我对NPE的正确处理非常重视,因此我认为这相对有意义。
equals()
和之间的区别compareTo()
是,equals()
仅检查两个对象是否彼此相等,其中compareTo()
使用来标识指定类的实例的自然顺序。此外equals()
方法有合同hashCode()
的方法,但compareTo()
并非如此。
根据JavaDoc:
请注意,null不是任何类的实例,即使e.equals(null)返回false,e.compareTo(null)也应引发NullPointerException。
强烈建议(但并非严格要求(x.compareTo(y)==
0)==(x.equals(y))。一般而言,任何实现Comparable接口且违反此条件的类都应明确指出这一事实。推荐的语言是“注意:此类具有与等式不一致的自然顺序”。
您可以随意compareTo()
在您的equals()
方法中重用方法逻辑,但请记住与的所有合同equals()
,hashCode()
以及与JavaDoc签订的compareTo()
方法合同。如果它们彼此不冲突,则继续。
我认为合同的执行更为重要。
本文向大家介绍Java实现equals()方法,包括了Java实现equals()方法的使用技巧和注意事项,需要的朋友参考一下 示例 要轻松实现对象的equals方法,可以使用EqualsBuilder类。 选择字段: 使用反射: 布尔参数用于指示是否等于应检查瞬态字段。 使用反射避免某些字段:
当实现Comparable接口并重写compareTo方法时, 第三行,我意识到当我重写它时,我可以使用compareTo,它会自动按照自然顺序进行比较。但是在可比较的界面中,它不是一个抽象的方法。没有定义它,它还可以比较吗?还有,为什么我不需要使用super关键字来区分这个比较。
本文向大家介绍Java中替代equals,compareTo和toString的方法,包括了Java中替代equals,compareTo和toString的方法的使用技巧和注意事项,需要的朋友参考一下 我们都曾在POJO中重写过equals(),compareTo()和toString()方法。但是另有其他能做到职责分离的更好的方法并带来更简洁的代码。阅读这篇文章来一探究竟吧! 更简明的职责——
如果你有如下需求,你必须重载 equals() 和 hashCode() 方法: 想把持久类的实例放入 Set 中(当表示多值关联时,推荐这么做),而且 想重用脱管实例 Hibernate 保证,仅在特定会话范围内,持久化标识(数据库的行)和 Java 标识是等价的。因此,一旦我们混合了从不同会话中获取的实例,如果希望 Set 有明确的语义,就必须实现 equals() 和 hashCode()。
问题内容: 我应该如何实施和在Java下面的类? 问题答案: 在Eclipse中,右键单击->源->生成hashCode(),然后equals()给出以下信息: 我已选择代码作为唯一字段
本文向大家介绍Java中equals()方法重写实现代码,包括了Java中equals()方法重写实现代码的使用技巧和注意事项,需要的朋友参考一下 Java中equals()方法重写实现代码 Java中的equals()方法是在Object类中定义,Object类是所有类的父类。换句话说,任何类都隐含地继承了该方法。判断两个对象的内容是否相同,必须使用equals()方法,对于没有重写该方法的