java,,"浅克隆,只复制一个对象 ,深克隆 对象和引用一起复制"有java实例吗?不理解啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java,,"浅克隆,只复制一个对象 ,深克隆 对象和引用一起复制"有java实例吗?不理解啊相关的知识,希望对你有一定的参考价值。

对只包含进本类型的类来说,无所谓深克隆。但是一个类包含集合类或者复杂的类,就要考虑二者的区别了。

class Student
private int id;
private Address address;
private ArrayList<Book> bookList;

对于以上类的一个对象a和克隆类 o来说:
浅克隆:
a !=o 但是 a.address == o.address, a.bookList == o.bookList
深克隆:
a !=o 但是 a.address != o.address, a.bookList != o.bookList
并且 bookList中的每个元素不是相同对象。
简言之, 浅克隆只复制本对象,深克隆除了本对象,其儿子、孙子、....都要克隆。
以上纯手敲,有错请包涵。
参考技术A 举例子:
一个猫,有年龄属性(int基本属性-克隆都一样)和一个(皮球)对象属性(克隆有区别)。
浅克隆一个猫,则第二只猫和第一只猫都指定了同一个皮球,即皮球本身没有被复制。内存中就一个皮球,两只猫用于同一个皮球引用地址,不管改变那只猫的皮球,另一只猫的皮球也跟着变。
深克隆
,第二只猫的皮球拥有和第一只猫一样的皮球(属性一样),但不是同一个对象,不是同一个引用。皮球互相独立,内存中有两个一样的皮球了,分别应用不同的皮球对象地址,把一只猫的皮球颜色改成红色,而另一猫的皮球还是原先的蓝色。追问

都很好,可是只能采纳一个,非常感谢

java怎么样构造函数复制一个对象

参考技术A 一、用Object 本身的复制对象的方法, clone()。对象可克隆的类必须实现Cloneable接口,并且clone方法是浅克隆。
二、类实现Serializable,用ObjectOutputStream、ObjectInputStream 来复制对象。

对象克隆有点复杂,尤其是第一种。
关于这个问题你可以搜索:
JAVA深复制(深克隆)与浅复制(浅克隆)
这篇文章看看。
参考技术B java复制对象:
一、使用clone。对象可克隆的类必须实现Cloneable接口,并且clone方法是浅克隆。
二、类实现Serializable,用ObjectOutputStream、ObjectInputStream 来复制对象。
三、可以直接new一个对象,赋值!

以上是关于java,,"浅克隆,只复制一个对象 ,深克隆 对象和引用一起复制"有java实例吗?不理解啊的主要内容,如果未能解决你的问题,请参考以下文章

Git 浅克隆

java怎么样构造函数复制一个对象

反射实现java深度克隆

JAVA浅复制与深复制

Java -- 浅克隆和深克隆定义和实现

对象的拷贝