为什么我们在Java中使用clone()方法?

2022-09-01 09:43:15

为什么我们在Java中使用这种方法?(请给出有关内存约束的答案。这会减少内存使用量吗?如果是,那么如何?这会减少内存泄漏的影响吗?clone()


答案 1

除了不使用克隆,实现复制构造函数之外,您还询问了内存约束。

克隆的想法是创建克隆对象的精确副本。因此,在最坏的情况下,您之后使用的内存量是其两倍。实际上 - 有点少,因为字符串经常被拘留,并且(通常)不会被克隆。即使这取决于克隆方法/复制构造函数的实现者。

下面是一个带有复制构造函数的类的简短示例:

public class Sheep {
  private String name;
  private Fur fur;
  private Eye[2] eyes;
  //...

  // the copy constructor
  public Sheep(Sheep sheep) {
    // String already has a copy constructor ;)
    this.name = new String(sheep.name);

    // assuming Fur and Eye have copy constructors, necessary for proper cloning
    this.fur = new Fur(sheep.fur); 
    this.eyes = new Eye[2];
    for (int i = 0; i < 2; i++) 
       eyes[i] = new Eye(sheep.eyes[i]);
  }
}

用法:

Sheep dolly = getDolly();  // some magic to get a sheep
Sheep dollyClone = new Sheep(dolly);

答案 2

我们不应该使用它这是一个破碎和过时的习语,应该在新代码中避免使用。最好尽可能改用复制构造函数。