本文介绍: ● 浅拷贝: 对基本数据类型进行值传递;: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是浅拷贝的

原文地址:https://blog.csdn.net/qq_57828911/article/details/134693789

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_6333.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

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