使用
是否有任何缺点或优点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];
}
答案 0 :(得分:2)
这两种方法都会创建数组元素的浅拷贝,这意味着数组中的元素仍然会相互引用。如果您想要浅副本,请坚持使用array.clone()
。
深度复制数组
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()
。