HashSet clone()方法

时间:2018-07-19 03:24:26

标签: java collections clone

我已经使用clone()创建了现有HashSet的副本,然后将它们的引用进行了如下比较:

HashSet<Employee> h = new HashSet<>();
HashSet<Employee> h1=(HashSet<Employee>) h.clone();
System.out.println(h==h1);

输出:

false

由于我们正在创建浅表副本,这不是真的吗?

2 个答案:

答案 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==h1false