2016-07-24 33 views
-3

一般使对象的副本,我们将其分配给像一个新的对象:复制一个对象的数据到其他Java中

Object a = new Object(); 
Object b = a; 

,而这样做的,我们需要照顾所有的事情的?我猜对象a和b是相互依赖的,因为它们将指向相同的位置,所以改变其中一个的值也会改变。如果错误请纠正。

此外,这种方式与克隆不同,或者我们可以将其视为仅克隆。

如果它的克隆,这会做深层克隆还是浅层?

+0

错了。该分配不会创建对象的副本。它创建另一个对*相同*对象的引用。 – EJP

回答

0

根本不克隆。它只是给与a和b指向完全相同的对象相同的对象的另一个名称。

1

第一条语句创建了一个指向内存中新创建对象的指针。第二条语句将变量点设置为相同的位置。这意味着两个指针指向内存中的同一个对象。是的,你可以从任何指针改变对象的状态。指针就像内存中的地址一样。

克隆是不同的事情。基本上你可以在另一个位置创建对象的整个副本并使用变量指向它。所以

Object a = new Object(); Object b = a.clone();

现在b指向内存中的新对象。最初两个对象将是相同的,但完全断开连接。改变对象a将不会对对象b产生影响。

Shahzad

0

这两个引用指向同一个对象。

Object.clone()方法的开箱即用实现可以进行浅度复制。如果一个对象内部有一个关联,它可以说一个拥有地址对象的雇员对象,那么当我们克隆雇员对象时,它的基本属性会在我们使用Object.clone()时被复制。 原始副本和克隆副本都将指向相同的地址对象。

实现深度克隆的一种方式是用户序列化。 首先序列化对象,然后反序列化它。 Java将在反序列化的同时创建所有新对象。

0

它不克隆.. Object a = new Object();对象b = a ;.这意味着对象'a'和'b'指向相同的内存位置。当我们克隆一个对象时。其他对象的状态存储在新对象中,而不是存储位置。

相关问题