0

使用有什么缺点或优点

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];
}
4

3 回答 3

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
于 2013-05-19T18:24:43.410 回答
1

首先,第一个版本更短且更具可读性。这在编程时总是一个很大的优势。

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

于 2013-05-19T18:23:52.697 回答
0

关于你的手写版本,

优点:让您可以更好地控制代码

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

clone()只要你能,我就会去。

于 2013-05-19T18:25:24.850 回答