首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深层拷贝vs浅拷贝vs参考拷贝

深层拷贝vs浅拷贝vs参考拷贝
EN

Stack Overflow用户
提问于 2020-06-16 08:11:48
回答 1查看 169关注 0票数 0

因此,我仍然在努力理解如何创建获取不同副本并返回em的方法。这里是下面的问题,我的尝试是在下面。

编写一个方法,该方法将对StringBuffer对象数组的引用作为参数,并返回该参数数组的引用、浅层和深层副本。注意,并不是数组的每个位置都会引用StringBuffer对象,有些位置可能是空的。

代码语言:javascript
复制
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:我更改了深度复制方法

代码语言:javascript
复制
    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;



}
EN

回答 1

Stack Overflow用户

发布于 2020-06-16 08:33:04

假设你有这样一个类:

代码语言:javascript
复制
class B {
    int b;

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

class A {
    B a;
}

参考副本

最简单的是,当你改变一个对象的时候,你也改变了另一个对象。

代码语言:javascript
复制
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

浅层复制

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

代码语言:javascript
复制
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.

深度复制

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

代码语言:javascript
复制
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.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62398990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档