java – 比较器接口的equals方法,为什么总是安全的不覆盖Object.equals(Object)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 比较器接口的equals方法,为什么总是安全的不覆盖Object.equals(Object),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1881字,纯文字阅读大概需要3分钟。
内容图文
![java – 比较器接口的equals方法,为什么总是安全的不覆盖Object.equals(Object)](/upload/InfoBanner/zyjiaocheng/789/cd39c0edb7e14536b9a7e7c30f9be3f4.jpg)
我目前正在研究Comparator接口,并注意到在Comparator’s equals方法的文档中,它说明了
Note that it is always safe not to override Object.equals(Object)
我已经检查了Object类中默认equals方法的实现
因此,使用equals方法的默认实现,它只是检查两个实例是否指向同一个对象,因为这= = obj测试参考相等性.
但是如果我有两个Comparator实例会发生什么,它们返回的结果是相同的,我想知道它们是否相同.如果我不重写默认的Object的equals方法,那么无论它们返回的结果是否相等,通过使用默认的Object的equals方法,将始终返回false.那么是否仍然可以安全地不覆盖Object.equals(Object)?
解决方法:
我想你错误地解释了java doc所说的内容:
this method can return true only if the specified object is also a comparator and it imposes the same ordering as this comparator
只有当它完全是同一个对象时,默认实现才会返回true,根据定义,它们都表示它们(实际上是单个)提供相同的排序顺序
这个定义并不意味着它会为不同的比较器返回true,即使它们提供相同的排序顺序,简单的验证:
import java.util.Comparator;
public class TestComparator {
static class Comparator1 implements Comparator<Integer> {
@Override
public int compare(final Integer o1, final Integer o2) {
return Integer.compare(o1, o2);
}
}
static class Comparator2 implements Comparator<Integer> {
@Override
public int compare(final Integer o1, final Integer o2) {
return Integer.compare(o1, o2);
}
}
public static void main(final String[] args) {
final Comparator1 c1 = new Comparator1();
final Comparator1 c11 = new Comparator1();
final Comparator2 c2 = new Comparator2();
System.out.println(c1.equals(c1)); // true
System.out.println(c1.equals(c11)); // false
System.out.println(c1.equals(c2)); // false
}
}
如果比较器等效,则默认实现可以返回true,也可以返回false(如果对象不同)
请注意,doc说:
However, overriding this method may, in some cases, improve performance by allowing programs to determine that two distinct comparators impose the same order.
因此,不使用覆盖是安全的,但仅仅保证不同但等效的比较器将被正确比较是不够的
内容总结
以上是互联网集市为您收集整理的java – 比较器接口的equals方法,为什么总是安全的不覆盖Object.equals(Object)全部内容,希望文章能够帮你解决java – 比较器接口的equals方法,为什么总是安全的不覆盖Object.equals(Object)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。