java的 clone方法

1.java语言中没有明确提供指针的概念与用法,而实质上每个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如果取操作这个指针而已。

2.在java中处理基本数据类型时,都是采用按值传递(传递的是输入参数的复制)的方式执行,除此之外的其他类型都是按值引用传递(传递的是对象的一个引用)的方式进行。除了在函数调用时是引用传递,在使用=复制时也是采用引用传递。

实现

package cloneDemo;

import java.util.Date;

public class Trousers implements Cloneable
{

    private int id;
    private Date productDate = new Date();

    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    public Date getProductDate()
    {
        return productDate;
    }

    public void setProductDate(Date productDate)
    {
        this.productDate = productDate;
    }

    private void changeDate()
    {
        this.productDate = new Date(System.currentTimeMillis() - 60 * 60 * 1000
                * 24 * 7);

    }

    public Object clone()
    {
        Trousers o = null;
        try
        {
            o = (Trousers) super.clone();
        } catch (CloneNotSupportedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 实现深复制
        o.productDate = (Date) this.getProductDate().clone();
        return o;
    }

    public static void main(String[] args)
    {
        Trousers t = new Trousers();
        Trousers x = (Trousers) t.clone();
        x.changeDate();
        System.out.println(t.getProductDate());
        System.out.println(x.getProductDate());
    }
}

执行结果
Sun Aug 14 19:17:12 CST 2016
Sun Aug 07 19:17:12 CST 2016

 

3.当类中包含了一些对象时,就需要用到深复制了,实现方法是在对对象调用clone()方法完成复制后,接着对对象中的非基本类型的属性也调用clone()方法,完成深复制。

浅复制:复制对象的所有变量都含有与原来对象相同的值,而所有对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

深复制:在浅复制的基础上,深复制吧复制的对象所引用的对象都复制了一边。

 

大部分内容来自《java程序员面试笔试宝典》何昊等著

转载于:https://www.cnblogs.com/rocky-AGE-24/p/5769740.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值