java 克隆 clone

原创 2017年01月03日 17:24:34

一、介绍

java中没有指针概念,所以存在对象的引用问题。如果对象作为参数传递或者直接使用=其实都是对对象的引用。也就是你修改第二个对象的同时第一个对象的内容也改变了。二者地址相同。所以java中需要通过继承Cloneable接口实现对象的克隆。

二、浅Clone

浅克隆又称影子克隆。一般情况下适用于java基本数据类型和string类型。对于复杂类型无法满足要求。

package test;

public class CloneTest implements Cloneable {
    public String name;

    public Object clone() {
        Object clone = null;
        try{
            clone = super.clone();
        } catch (CloneNotSupportedException e){
            e.printStackTrace();
        }
        return clone;
    }

    public static void main(String[] args){
        CloneTest test = new CloneTest();
        CloneTest copyTest = new CloneTest();
        test.name = "AAAA";
        copyTest = (CloneTest)test.clone();
        copyTest.name = "BBBB";
        System.out.println(test.name);
        System.out.println(copyTest.name);
    }
}

三、深Clone

对于复杂成员,vector、数组之类的需要采用深层克隆。

package test;

public class CloneTest implements Cloneable {
    public String[] name = new String[2];

    public Object clone() {
        CloneTest clone = null;  //注意申明的对象,后面调用clone.name需要类中有此类型
        try{
            clone = (CloneTest)super.clone();
            clone.name = (String[])name.clone();
        } catch (CloneNotSupportedException e){
            e.printStackTrace();
        }
        return clone;
    }

    public static void main(String[] args){
        CloneTest test = new CloneTest();
        CloneTest copyTest = new CloneTest();
        test.name[0] = "AAAA";
        test.name[1] = "AA11";
        copyTest = (CloneTest)test.clone();
        copyTest.name[0] = "BBBB";
        copyTest.name[1] = "BB11";
        System.out.println(test.name[0]);
        System.out.println(copyTest.name[0]);
    }
}

相关文章推荐

Java中的克隆(Clone)机制

  • 2007年07月16日 09:55
  • 49KB
  • 下载

java克隆对象clone()的用法和作用

内容摘要若需修改一个对象,同时不想改变调用者的对象,就要制作该对象的一个本地副本。这也是本地副本最常见的一种用途。若决定制作一个本地副本,只需简单地使用clone()方法即可。Clone是“克隆”的意...

Java中的克隆(Clone)机制

转自:http://blog.csdn.net/Senton/archive/2007/08/03/1723826.aspx现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生这个词语确实很“火...
  • FG2006
  • FG2006
  • 2011年05月07日 16:09
  • 471

Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

Part I 没啥好说的,直接开始Part II吧。   Part II 谈到了对象的克隆,就不得不说为什么要对对象进行克隆。Java中所有的对象都是保存在堆中,而堆是供全局共...
  • vasal
  • vasal
  • 2013年04月18日 13:51
  • 388

Java中的克隆clone以及对数组的复制

一、浅克隆和深克隆     1. 浅克隆(shadow clone)     只需要复制对象的字段值,对于8种基本类型,如int,long,float等,则复制值;对于复合数据类型仅复制该字段值,如数...

神奇克隆术——Java深、浅Clone

本篇博客通过一个不断加强银行系统的例子来详细阐述了Java中深、浅Clone的区别,优点和缺陷。代码详细,分析细致。并提供了Java源码示例下载。希望我们一起在讨论中共同进步。...

11. JAVA常用类库 Part 4 (对象克隆技术clone、Arrays类、Comparable接口、比较器Comparator、观察者设计模式) ----- 学习笔记

 11.11 对象克隆技术 clone 11.12 Arrays类 11.13 Comparable接口           11.13.1 比较器的基本应用  ...

JAVA对象任意深度克隆clone工具类分享

JAVA对象任意深度克隆clone工具类分享 源代码下载地址:http://www.zuidaima.com/share/1550463408114688.htm...

Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

Part I 没啥好说的,直接开始Part II吧。   Part II 谈到了对象的克隆,就不得不说为什么要对对象进行克隆。Java中所有的对象都是保存在堆中,而堆是供全局共...

JAVA 复制对象时为什么要用克隆clone()而不用“=”的原因

今天一直很纠结为什么java里面有个clone()方法,复制对象时直接“=”不就行了,为什么还要在每个类里面重写clone方法。     Google了下,发现这个是典型的先学C/C++后再学JAVA...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 克隆 clone
举报原因:
原因补充:

(最多只允许输入30个字)