Java clone()方法详解

package common;

import java.util.ArrayList;
import java.util.List;

import action.LoginAction;

/**
 * Object.clone()方法为影子(浅)克隆,例如将对象A克隆出个B,
 * 那么先根据A的大小分配B的空间,创建B对象,然后遍历A的域对象进行克隆。
 * 克隆域对象时,如果是基本类型则重新创建对象然后赋值,包括String类型
 * 对于非基本类型,则是复制引用,引用指向原域对象,修改其中一个另外一个就会改变
 *
 * 至于深度克隆,这是将 原来对象的属性和引用属性全部复制一份
 * @author xubo
 *
 */
public class CloneTest implements Cloneable {

    public List<String> a = new ArrayList<String>();

    public String b = new String("sss");

    public LoginAction c = new LoginAction();

    public String getB() {

        return b;
    }

    public void setB(String b) {

        this.b = b;
    }

    public List<String> getA() {

        return a;
    }

    public void setA(List<String> a) {

        this.a = a;
    }

    public LoginAction getC() {

        return c;
    }

    public void setC(LoginAction c) {

        this.c = c;
    }

    public CloneTest clone() throws CloneNotSupportedException {

        return (CloneTest) super.clone();
    }

    public static void main(String args[]) throws CloneNotSupportedException {

        CloneTest p = new CloneTest();
        CloneTest p1 = p.clone();
        CloneTest p2 = new CloneTest();

        System.out.println(p == p1);
        System.out.println(p.getA() == p1.getA());
        System.out.println(p.getB() == p1.getB());
        System.out.println(p.getC() == p1.getC());
        System.out.println("===============================");
        p1.setB("xx");
        p.getC().setCos("cosA");
        p1.getC().setCos("cosB");
        System.out.println(p.getB() == p1.getB());
        System.out.println(p.getB() + ";;;;;;;;;;;;;" + p.getC().getCos());
        System.out.println(p1.getB() + ";;;;;;;;;;;;;" + p1.getC().getCos());
        System.out.println("===============================");
        System.out.println(p.getB());
        System.out.println(p.getB() == p2.getB());
        System.out.println(p.getC() == p2.getC());
    }

}


运行结果

false
true
true
true
===============================
false
sss;;;;;;;;;;;;;cosB
xx;;;;;;;;;;;;;cosB
===============================
sss
false
false




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值