您的位置:首页 > 编程语言 > Java开发

浅谈java中的clone()方法

2017-07-08 00:00 246 查看
克隆是指在克隆对象,实在对空间复制一块内存,是两个地址值不相同的两个对象。java中的克隆分为浅克隆和深度克隆。浅克隆是指克隆出一个对象,且该对象的属性只有基本数据类型,不含引用类型。深度克隆是指将克隆目标的所用引用类型,引用类型中的引用类型都克隆出来。常用的方法之一实现Cloneable()接口。

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: