深层副本与浅层副本与参考副本

时间:2020-06-16 00:11:48

标签: java

所以我仍在努力了解如何创建采用不同副本并返回em的方法。这是下面的问题,下面是我的尝试。

编写一个方法,该方法将对StringBuffer对象数组的引用作为参数,并返回该参数数组的引用,浅表和深表副本。请注意,并非数组的每个位置都将引用StringBuffer对象,有些可能为null。

public static void main(String[] args) {
    // TODO Auto-generated method stub

    //probOne();
    StringBuffer[] abc = new StringBuffer[]{new StringBuffer("Anakin"),new StringBuffer("Luke"),new StringBuffer("Ben")};
    System.out.println(abc);


    StringBuffer[] cba = refCopy(abc);
    System.out.println(cba);


    cba = shalCopy(abc);
    System.out.println(cba);

    cba = deepCopy(abc);
    System.out.println(cba);







}





public static StringBuffer[] refCopy(StringBuffer[] sa)
{       
    StringBuffer[] sb = sa;
    return sb;
}

public static StringBuffer[] shalCopy(StringBuffer[] sa)
{
    StringBuffer[] copy = new StringBuffer[sa.length];

    copy=sa;

    return copy;

}


public static StringBuffer[] deepCopy(StringBuffer[] sa)
{
    StringBuffer[] copy = new StringBuffer[sa.length];

    for (int i = 0; i < copy.length; i++) {

        copy[i] = sa[i];
    }

    return copy;
}

编辑1:我更改了深层复制方法

    public static StringBuffer[] deepCopy(StringBuffer[] sa)
{

    StringBuffer[] copy = new StringBuffer[sa.length];

    for (int i = 0; i < copy.length; i++) {

        copy[i] = new StringBuffer(sa[i]);
    }

    return copy;



}

1 个答案:

答案 0 :(得分:2)

假设您有这个课程:

class B {
    int b;

    B(int val) { // constructor
        b = val;
    }
}

class A {
    B a;
}

参考副本

最简单的方法,基本上是在更改一个对象时又在另一个对象上更改的地方。

A orig = new A();
A copy = orig;
copy.a = new B(5); // now orig's a variable is also a B object with value 5

浅拷贝

第二个最简单的方法是创建一个新对象,将字段复制为参考副本。

A orig = new A();
A.a = new B(5); // random value
A copy = new A();
copy.a = orig.a; // copy the b variable by reference
copy.a.b = 5; // affects orig's b variable.

深拷贝

不通过引用复制所有变量。

A orig = new A();
A.a = new B(5); // random value
A copy = new A();
copy.a = new B(orig.a.b); // copy the b variable not by reference
copy.a.b = 5; // doesn't affect orig's b variable.
相关问题