Java—浅谈clone()
2017-03-12 16:22
162 查看
首先阐述一个概念:
Java在处理基本数据类型(例int,char,double等)时,都是采用按值传递(传入的是输入参数的复制)的方式执行,除此之外的其他类型都是按引用传递(传递的是一个对象的引用)的方式执行。
在实际的操作中,可能需要一个与已存在对象相同的另一个对象,并且对另一个对象的修改不会影响先前的对象,于是Java提供了一个clone()方法实现这种需求。这种方法返回的Object对象的复制,而不是引用。
下面阐述一下clone()方法的使用步骤:
首先需要继承Cloneable接口。而Cloneabe只是一个标志接口,没有任何方法的。下面贴上Cloneable的源码。
在类中重写clone()方法。
在clone()方法中调用super.clone()方法,super.clone()调用的是Object中的clone方法,Object中的方法是这么定义的:
把浅复制的引用指向新的克隆体。
深复制每一个对象,或者说是引用的对象。
下面说一下浅复制与深复制的区别:
浅复制:复制后的所有变量都拥有与以前对象相同的值,而所有对其他对象的引用,仍然指向之前的对象。简单地说,浅复制之后,对对象的引用没有变。
深复制:复制后的所有变量都拥有与以前对象相同的值,那些引用其他对象的变量指向被复制的新对象,而不再是被引用的对象。简单地说,深复制把变量引用的对象也复制了一遍。
Java在处理基本数据类型(例int,char,double等)时,都是采用按值传递(传入的是输入参数的复制)的方式执行,除此之外的其他类型都是按引用传递(传递的是一个对象的引用)的方式执行。
在实际的操作中,可能需要一个与已存在对象相同的另一个对象,并且对另一个对象的修改不会影响先前的对象,于是Java提供了一个clone()方法实现这种需求。这种方法返回的Object对象的复制,而不是引用。
下面阐述一下clone()方法的使用步骤:
首先需要继承Cloneable接口。而Cloneabe只是一个标志接口,没有任何方法的。下面贴上Cloneable的源码。
package java.lang; /** 1. 没有任何方法,知识一个标志接口。 2. @author liang 3. */ public interface Cloneable { }
在类中重写clone()方法。
在clone()方法中调用super.clone()方法,super.clone()调用的是Object中的clone方法,Object中的方法是这么定义的:
protected native Object clone() throws CloneNotSupportedException;。
把浅复制的引用指向新的克隆体。
深复制每一个对象,或者说是引用的对象。
下面说一下浅复制与深复制的区别:
浅复制:复制后的所有变量都拥有与以前对象相同的值,而所有对其他对象的引用,仍然指向之前的对象。简单地说,浅复制之后,对对象的引用没有变。
深复制:复制后的所有变量都拥有与以前对象相同的值,那些引用其他对象的变量指向被复制的新对象,而不再是被引用的对象。简单地说,深复制把变量引用的对象也复制了一遍。
相关文章推荐
- 浅谈java里的clone
- java clone技术 浅谈
- java clone技术 浅谈
- 浅谈Java的标识接口-cloneable
- 浅谈Java Cloneable接口
- 浅谈java中的clone()方法
- java clone技术 浅谈 转
- 浅谈——Java中的Clone()方法
- Java 学习方法浅谈
- JAVA中的指针,引用及对象的clone
- 浅谈JAVA VM 发展
- 浅谈Java的输入输出流(转 原创:morgan83)
- 浅谈Java的输入输出流
- 深入浅出Java clone技术(3)
- [转载]JAVA学习浅谈
- 深入浅出Java clone技术
- 浅谈Java与C#的事件处理机制
- java的“别名”以及clone机制
- 浅谈 Java 中 this 的使用
- 浅谈Java中的存储空间类型