ston77 发表于 2017-1-10 17:06:37

关于java的数组和类的克隆

本帖最后由 ston77 于 2017-1-10 17:30 编辑

--> 数组的克隆

对于一维数组的克隆一般而言有三种办法:

        1.通过遍历源数组挨个取出然后存入目标数组

        2.通过System.arraycopy(src, srcPos, dest, destPos, length)方法,其中
                src 为源数组
                srcPos 为源数组的起始位置
                dest 为目标数组
                destPos 没错,聪明如你,就是目标数组起始位置
                length 为拷贝长度,如:
               
int [] src = new int[]{1,2,3,4,5};
int [] dest = new int;
System.arraycopy(src, 0, dest, 0, src.length);bg6.png

        3.呢就比较常用 即src.clone() 一行代码搞定 . 但是.......

对于二位数组 (再多就不考虑了,一样的道理 ) src.clone() 就有问题了, 什么问题? ...
       
int [] [] src = new int[][]{{1,2,3,4,5},{11,22,23,43,25},{131,222,23,43,325}};
int [] [] dest = src.clone();

        clone() 方法是对基本类型 值 的克隆,为了更好的说明, 来两张图
        使用克隆方法,得到的是这个结果:
       

        所以再这样来一次:
       
for ( int i = 0; i < dest.length ; i ++ ) {
        dest = dest .clone();
}
       
        就得到了下图:
       


--> 类的克隆

        **** Hidden Message *****
               
               
        @Override
        public Object clone(){
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                try {
                       
                        ObjectOutputStream oos = new ObjectOutputStream(out);
                        oos.writeObject(this);
                       
                        byte [] arrayByte = out.toByteArray();
                       
                        ByteArrayInputStream in = new ByteArrayInputStream(arrayByte);
                        ObjectInputStream oin = new ObjectInputStream(in);
                        Object result = oin.readObject();
                       
                        return result;
                       
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return null;
        }




       
好吧,这也是我的一个学习笔记,我也是菜鸟,欢迎一起交流 , !{:5_110:} {:5_109:}拜拜

零度非安全 发表于 2017-1-10 17:58:45

{:9_232:}厉害呢

枫桥叶泊为谁? 发表于 2017-7-24 21:54:24

没看懂
页: [1]
查看完整版本: 关于java的数组和类的克隆