参考副本和浅副本有什么区别?你如何填充StringBuffer数组?在创建参考副本方面,此代码是否正确?
import java.util.Arrays;
public class ArrayRefCopy {
public static int n = 3;
public static void main(String[] args){
StringBuffer[] hel = new StringBuffer[n];
refCopy(hel);
System.out.println(Arrays.toString(hel));
}
public static StringBuffer[] refCopy(StringBuffer[] bra){
StringBuffer[] ber = new StringBuffer[n];
return ber = bra;
}
}
答案 0 :(得分:1)
嗯,实际上,你的方法refCopy()
根本没有做任何事情。
您在执行时将hel
数组refCopy()
的引用传递给方法bra
,该方法将在ber
处可用。在方法内部,您创建一个新数组并将对新数组的引用分配给hel
。在下一行中,您将再次覆盖此引用,并引用您通过方法参数bra
收到的数组hel
。
然后返回对数组hel
的引用,但是不要使用返回的值。
因此,refCopy()
仍然保存与以前相同的数组的引用,并且您在override var shouldAutorotate: Bool {
return false
}
中创建的新数组超出范围并将被垃圾回收。
关于参考副本和浅层副本的含义和定义,请google条款。找到一个全面的定义/解释应该很容易。
答案 1 :(得分:0)
这会有用吗?
import java.util.Arrays;
public class ArrayRefCopy {
public static int n = 3;
public static void main(String[] args){
StringBuffer[] hel = new StringBuffer[n];
refCopy(hel);
System.out.println(Arrays.toString(hel));
}
public static StringBuffer[] refCopy(StringBuffer[] bra){
StringBuffer[] ber = new StringBuffer[n];
return ber = Arrays.copyOf(bra, n);
}
}