关闭

JAVA clone的简单理解

标签: javaclone
177人阅读 评论(0) 收藏 举报
分类:

在编程的时候会碰到一个很无解的问题:比如现在有两个对象,一个对象改了某个属性后,有可能另一个对象也跟着变了。

如以下代码:
A.java:

private String name = "";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

Main.java:

A a1 = new A();
        A a2 = new A();
        a1.setName("1");
        a2 = a1;
        a2.setName("2");
        System.out.println("a1==" + a1.getName());
        System.out.println("a2==" + a2.getName());

输出的结果:

a1=2;
a2=2;

传引用的时候是把自己的地址给前一个对象,改数据的话自然都会变


通过clone就可以解决这个问题:

A.java:

public class A implements Cloneable {

    public A() {
    }

    private String name = "";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        A a = null;
        a = (A) super.clone();
        return a;
    }

}

Main.java:

public static void main(String[] args) throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        A a1 = new A();
        A a2 = new A();
        a1.setName("1");
        a2 = (A) a1.clone();
        a2.setName("2");
        System.out.println("a1==" + a1.getName());
        System.out.println("a2==" + a2.getName());
    }

输出的结果:

a1=1;
a2=2;

clone应该是给前一个对象开辟了一个新的地址

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:165600次
    • 积分:3424
    • 等级:
    • 排名:第10265名
    • 原创:181篇
    • 转载:15篇
    • 译文:0篇
    • 评论:50条
    文章分类
    最新评论