【问题标题】:Is this a reference copy or a shallow copy?这是参考副本还是浅副本?
【发布时间】:2015-05-24 23:02:25
【问题描述】:

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

【问题讨论】:

    标签: reference copy stringbuffer


    【解决方案1】:

    嗯,实际上,您的方法refCopy() 根本没有做任何事情。

    当您执行它时,您将对数组hel 的引用传递给方法refCopy(),该方法将作为bra 提供。在方法内部,您创建一个新数组并将对新数组的引用分配给ber。在下一行,您再次覆盖此引用,但是使用您通过方法参数bra 收到的数组hel 的引用。

    然后您返回对数组hel 的引用,但是您不使用返回的值。

    因此,hel 仍然持有对与以前相同的数组的引用,并且您在 refCopy() 中创建的新数组超出范围并将被垃圾回收。

    关于参考文案和浅文案的含义和定义,请自行google。应该很容易找到一个全面的定义/解释。

    【讨论】:

    • 这个“答案”没有什么帮助。
    • 好吧,如果我的出现惹恼了你,我很抱歉。
    【解决方案2】:

    这行得通吗?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2013-12-22
      • 2019-11-16
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多