使用上面的手动副本array.clone()有什么好处

时间:2013-05-19 18:22:00

标签: java clone

使用

是否有任何缺点或优点
public Loteria( int[] liczby) {
   this.liczby = liczby.clone();
}

而不是:

public Loteria( int[] liczby) {
   this.liczby = new int[liczby.length];
   for(int i = 0....)
       this.liczby[i] = liczby[i];
}

3 个答案:

答案 0 :(得分:2)

这两种方法都会创建数组元素的浅拷贝,这意味着数组中的元素仍然会相互引用。如果您想要副本,请坚持使用array.clone()

  • 更易阅读
  • 少用代码,使用标准Java API。

深度复制数组

Java 6 +

this.liczby = Arrays.copyOf(liczby, liczby.length);

旧版本

System.arraycopy(liczby, 0, this.liczby, 0, liczby.length);

<强>测试

Object[] original = { new Object(), null };
Object[] copy = new Object[2];
System.arraycopy(original, 0, copy, 0, original.length);
Object[] copy2 = Arrays.copyOf(original, original.length + 1);
copy2[1] = 2;
System.out.println(original[1]); // null
System.out.println(copy2[1]); // 2

答案 1 :(得分:1)

首先,第一个版本更短,更易读。编程时这总是一个很大的优势。

至于性能,您应该始终首先进行分析,只有在遇到瓶颈时才会担心。但是在现代虚拟机上,它们可能最终同样快速(尽管如此,如果它很重要,你需要分析)。数组克隆通常通过内在实现,但VM可能会认识到第二个版本是等效的。

答案 2 :(得分:0)

关于您的手写版本,

PROS:让您更好地控制代码

缺点:难以阅读和维护。与通用clone()相比没有性能优势。

我会尽可能地使用clone()