码迷,mamicode.com
首页 > 编程语言 > 详细

java的clone方法

时间:2015-06-24 12:17:21      阅读:147      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!