我已经使用clone()创建了现有HashSet的副本,然后将它们的引用进行了如下比较:
HashSet<Employee> h = new HashSet<>();
HashSet<Employee> h1=(HashSet<Employee>) h.clone();
System.out.println(h==h1);
输出:
false
由于我们正在创建浅表副本,这不是真的吗?
答案 0 :(得分:1)
在Java ==中,对于对象检查对象是否与它的对象完全相同。
如果您去检查克隆方法:
__init__.py
很容易看出它正在创建一个新对象。所以现在您有两个浅浅相等的不同对象
答案 1 :(得分:1)
HashSet
overrides clone()
的Object
class方法
The general intent is that, for any object x, the expression:
x.clone() != x
will be true, and that the expression:
x.clone().getClass() == x.getClass()
will be true, but these are not absolute requirements. While it is typically the case that:
x.clone().equals(x)
will be true, this is not an absolute requirement.
按照惯例,此方法返回的对象应该 独立于该对象(正在克隆)。
在Java中,==
检查引用不是对象,因此,h==h1
是false
。