Java Object.equals
有人能告诉我为什么这会返回真的吗?
我想如果我把东西投入到例如对象然后调用.equals, 将使用Object的默认实现.并且s1 == s2应该返回false: – / 请告诉我在哪个主题下我可以找到更多关于此行为的信息. Set<String> s1 = new HashSet<String>(as("a")); Set<String> s2 = new HashSet<String>(as("a")); Object o1 = (Object)s1; Object o2 = (Object)s2; System.out.println(o1.equals(o2)); 解决方法
Java中的方法默认是虚拟的.特别是,Object.equals是虚拟的(因为它没有被声明为
final ).从
HashSet overrides Object.equals 1开始,您将看到在对运行时类型为HashSet的对象上调用虚方法时使用的等于的HashSet实现(请记住
dynamic dispatch取决于接收对象的运行时类型,而不是编译时类型).
1:我们知道HashSet会覆盖Object.equals,因为documentation表示HashSet派生自AbstractSet,而
它明确定义了值相等,而默认的Object.equals是身份相等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |