浅谈java中的clone()方法
2017-07-08 00:00
246 查看
克隆是指在克隆对象,实在对空间复制一块内存,是两个地址值不相同的两个对象。java中的克隆分为浅克隆和深度克隆。浅克隆是指克隆出一个对象,且该对象的属性只有基本数据类型,不含引用类型。深度克隆是指将克隆目标的所用引用类型,引用类型中的引用类型都克隆出来。常用的方法之一实现Cloneable()接口。
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。所以子类想要调用clone()方法,必须要实现Cloneable接口,同时重写clone()方法,若要其他类都能调用该类的clone()方法,注意重写时将父类中clone()权限修饰符protected修改成为Public。
示例代码如下:
输出结果是:
false
true
可以看出,克隆出来的对象只是原有对象的副本,因此在判断原有对象和克隆出来的对象是否相等时,返回false。虽然Object对象的clone方法虽然简单易用,但它正是一种浅克隆,即它克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆,因此比较两个对象的address时的返回值为true。
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。所以子类想要调用clone()方法,必须要实现Cloneable接口,同时重写clone()方法,若要其他类都能调用该类的clone()方法,注意重写时将父类中clone()权限修饰符protected修改成为Public。
示例代码如下:
class Address{ String detail; public Address(String detail){ this.detail = detail; } } class User implements Cloneable{ int age; Address address; public User(int age){ this.age = age; address = new Address("杭州"); } public User clone() throws CloneNotSupportedException{ return (User)super.clone(); } } public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { User user = new User(28); User user1 = user.clone(); System.out.println(user == user1); System.out.println(user.address == user1.address); } }
输出结果是:
false
true
可以看出,克隆出来的对象只是原有对象的副本,因此在判断原有对象和克隆出来的对象是否相等时,返回false。虽然Object对象的clone方法虽然简单易用,但它正是一种浅克隆,即它克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆,因此比较两个对象的address时的返回值为true。
相关文章推荐
- 浅谈——Java中的Clone()方法
- Java中很有用却很容易被忽略的方法-----clone
- java clone方法使用详解
- 浅谈Java中的同步的方法和原理
- java Clone使用方法详解
- 浅析java中clone()方法
- Java克隆方法的研究(clone)
- 浅谈在Java中产生随机数的两个重要方法
- java中飞clone方法
- java Clone方法的使用
- Java clone方法使用详解
- java clone方法使用详解
- 【转】 java clone方法使用详解
- 浅谈java web开发中的中文乱码的解决方法
- java中的clone方法
- java 的clone方法
- java clone方法使用详解
- java里的clone方法,super.clone()到底调用的是谁??
- java,实例初始化块,静态初始化块,clone方法
- Java中Object.clone方法的用途