又见Clone

本来以为已经弄清楚Clone了,没想到在使用的时候又遇到问题!总归是纸上得来终觉浅啊!

说来也怪一些基础的东西没搞清。

    public static void testArrayClone(int[] array) {
        temp = array.clone();
        for (int i = 0; i < temp.length; i++) {
            temp[i] = (int) Math.random();
        }
        System.out.println("函数体以内--克隆之前:"+array);
        array = temp.clone();
        System.out.println("函数体以内:"+array);
//        for (int i = 0; i < temp.length; i++) {
//            array[i] = temp[i];
//        }
    }

在函数体外调用array,array便没有变啊!

因为这里和C类似,在函数中,通过参数对对象的操作不会丢失,但是对这个引用的重新赋值会丢失。其实应该说是对引用重新赋值了啊!额~以为Clone(深克隆)是一个对一个进行赋值的!!于是大错特错啊,Clone是复制了一个新的引用地址给对象!

    public static void testClone(){
        int[] a = {1,2,4,2};
        int[] b = {2,3,5,56};
        System.out.println(a);
        System.out.println(b);
        a = b.clone();
        System.out.println(a);
        System.out.println(b);
    }

 

输出:

[I@1888759
[I@6e1408
[I@e53108
[I@6e1408

是啊,是赋了一个新的引用给他啊!曾经的a再也找不到了。

posted on 2012-05-18 10:40  山上明月  阅读(172)  评论(0编辑  收藏  举报