通常,为了制作一个对象的副本,我们将它分配给一个新对象,如:
Object a = new Object();
Object b = a;
在这样做的时候,我们需要照顾什么?我猜对象a和b依赖于彼此,因为它们将指向相同的位置,因此改变其中的值也会改变其他位置。如果错误请纠正。
此外,这种方式与克隆不同,或者我们只能将其视为克隆。
如果是克隆,这会做深度克隆还是浅层?
答案 0 :(得分:1)
第一个语句创建了一个指向内存中新创建的对象的指针。第二个语句将变量指向同一位置。这意味着两个指针都指向内存中的同一个对象。是的,你可以从任何指针改变对象的状态。指针就像内存中的地址一样。
克隆是不同的事情。基本上你在另一个位置创建对象的整个副本,并使用变量指向它。所以
Object a = new Object(); 对象b = a.clone();
现在b指向内存中的新对象。最初两个对象将完全相同但完全断开。改变对象a对对象b没有影响。
Shahzad
答案 1 :(得分:0)
根本不是克隆。它只是为同一个对象赋予另一个名称,因为a和b指向完全相同的对象。
答案 2 :(得分:0)
两个引用都指向同一个对象。
Object.clone()方法的开箱即用实现执行浅拷贝。如果一个对象内部有一个关联,那么让我们说一个具有地址对象的雇员对象,那么当我们克隆雇员对象时,只有当我们使用Object.clone()时才会复制它的原始属性。 原始副本和克隆副本都将指向同一个地址对象。
实现深度克隆的一种方法是用户序列化。 首先序列化对象,然后反序列化它。 Java将在反序列化时一起创建所有新对象。
答案 3 :(得分:0)
它不是克隆..对象a =新对象();对象b = a;。这意味着对象'a'和'b'指向相同的内存位置。当我们克隆一个对象。其他对象的状态存储在新对象中,但不存储在内存位置。