这是参考副本还是浅拷贝?

时间:2015-05-24 23:02:26

标签: reference copy stringbuffer

参考副本和浅副本有什么区别?你如何填充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;
    }
}

2 个答案:

答案 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);
    }
}