首页 > 编程语言 > 详细

java的clone方法

时间:2015-06-24 12:15:47      阅读:239      评论:0      收藏:0      [点我收藏+]

最近在写 hugenumber 类中自乘方法的时候遇到了一点问题。发现问题出在未对对象进行克隆上。

以下是关于克隆总结的几点;

----------------------------------------分割线--------------------------------

Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用

的区别,特别是先学c、c++后学java的程序员。并且由于Java不能通过简单的赋值来解决对象复制

的问题,在开发过程中,也常常要要应用clone()方法来复制对象。比如函数参数类型是自定义的类

时,此时便是引用传递而不是值传递。以下是一个小例子:

 

public class testClone {
    
    public void changeA(A a){
        a.name="b";
    }
    public void changInt(int i){
        i=i*2+100;
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        testClone test=new testClone();
        A a=new A();
        a.name="a";
        System.out.println("before change : a.name="+a.name);
        test.changeA(a);
        System.out.println("after  change : a.name="+a.name);
        int i=1;
        System.out.println("before change : i="+i);
        test.changInt(i);
        System.out.println("after  change : i="+i);
    }

}

当Class A成员变量类型是java的基本类型时(外加String类型),只要实现如上简单的clone(称影子clone)就可以。

但是如果Class A成员变量是数组或复杂类型时,就必须实现深度clone。

public Object clone() {
        A o = null;
        try {
            o = (A) super.clone();
            o.name=(String[])name.clone();//其实也很简单^_^
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return o;
    }

否则克隆的其实是原来对象的地址。

 

java的clone方法

原文:http://www.cnblogs.com/fuxiaoshenjian/p/4597055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!