本文介绍: ● 浅拷贝: 对基本数据类型进行值传递;:Objectclone 方法是一个浅拷贝,如果它拷贝对象中有其他对象,那么其中的对象是不会得到彻底的拷贝。● 深拷贝:对基本数据类型进行值传递,对引用数据类型创建一个新的对象,并复制内容,此为深拷贝。深拷贝是彻底的拷贝,两对象中所有的成员都是独立的一份,而且,成员对象中的成员对象也是独立一份。● 引用拷贝: 是对引用地址的拷贝,说明引用地址一样,指向堆中的对象是同一个对象。浅拷贝中的某些成员变量可能是共享的,深拷贝如果不够彻底,就是浅拷贝。

深拷贝、浅拷贝、引用拷贝

在这里插入图片描述
● 浅拷贝: 对基本数据类型进行值传递; 对引用类型,复制了一份引用类型变量 里面存储内存地址一样 指向的对象也一样。

● 深拷贝:对基本数据类型进行值传递,对引用数据类型创建一个新的对象,并复制其内容,此为深拷贝。

● 引用拷贝: 是对引用地址的拷贝,说明引用地址一样,指向堆中的对象是同一个对象。

Object类的clone()方法

结果:Objectclone 方法是一个浅拷贝,如果它拷贝的对象中有其他对象,那么其中的对象是不会得到彻底的拷贝。

深拷贝是彻底的拷贝,两对象中所有的成员都是独立的一份,而且,成员对象中的成员对象也是独立一份。

浅拷贝中的某些成员变量可能是共享的,深拷贝如果不够彻底,就是浅拷贝。

代码验证:

public class Person implements Cloneable{
	
	private int age ;
	private String name;
	
	public Person(int age, String name) {
		this.age = age;
		this.name = name;
	}
	
	public Person() {}
 
	public int getAge() {
		return age;
	}
 
	public String getName() {
		return name;
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		return (Person)super.clone();
	}
}

按照如下代码验证:

Person p = new Person(23, "zhang");
Person p1 = (Person) p.clone();
		
String result = p.getName() == p1.getName() 
		? "clone是浅拷贝的" : "clone是深拷贝的";
		
System.out.println(result);
//输出为:clone是浅拷贝的

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注