ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用Java克隆

2019-07-05 13:13:32  阅读:265  来源: 互联网

标签:java clone cloneable


参见英文答案 > Why is the Object class’s clone() method giving a deep copy of object?                                    4个
>            Object Clone Shallow copy doesn’t change variable                                    3个

class Person implements Cloneable {

    String firstName;

    public String getFirstName() {
        return firstName;
     }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public Person clone() throws CloneNotSupportedException {
            return (Person) super.clone();
        }
   }

    Person p1 = new Person();
    p1.setFirstName("P1 Sara");

    Person p3 = new Person();
    try {
        p3 = (Person) p1.clone();
    } catch (CloneNotSupportedException e) {
    }

    p3.setFirstName("cloned Sara");
    System.out.println("P3 : " + p3.getFirstName());
    System.out.println("P1: " + p1.getFirstName());

我已经读过clone()方法实际上是一个浅层复制.
因此,我假设当P3中的字段值改变时,P1中的字段值也会改变.
但是,这没有发生.
我在这里错过了什么?

解决方法:

clone()方法实际上是浅层复制.
以下是您的示例中发生的情况:

> person1引用了名称.让我们称之为引用A.引用指向堆内存中的某个位置.
>将person1复制到person3后,person3中的名称引用(我们称之为引用B)指向堆内存中的相同位置.但它不是同一个参考.它是2个不同的引用,指向堆内存中的相同位置.
>当您调用p3.setFirstName(“克隆Sara”)时,引用B将更新为指向堆内存中的另一个位置.没有理由更改引用A指向的值.

标签:java,clone,cloneable
来源: https://codeday.me/bug/20190705/1387678.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有