Obj A = new Obj(1); //setting A.n = 1
Obj B = A;
B.n = 2;
所以A.n
现在等于2
,因为B
是对A
的引用。
Obj C = new Obj(3);
B = C;
因此,B
和C
相同,而n
仍为3
时,A.n
均为2
。我的问题是我希望Java通过类似于这一行的代码来制作A
的副本C
,而不是将B
设置为对C
的引用。我怎样才能做到这一点?目前,我的解决方案是执行此操作,而不是B = C
:
B.n = C.n;
在这种情况下,A.n
现在等于C.n
。问题是如果要复制大约10种不同的原语怎么办?
我的确切情况是我将A
作为参数传递给构造函数,然后将该构造函数分配给B
。我试图通过使A
等于B
来通过引用A
来操纵C
。当我只做B = C
时不起作用。因此,当我对B
做某事时,我希望它确实发生在A
上。除非我传递包含A
的整个对象,否则我将无法直接访问A
。
给Obj
提供一个将自身的副本作为对象返回的方法(例如B = C.Copy()
)也无法解决,因为B仍然丢失了对A
的引用。我想我可以做类似B.Set(C)
的事情,其中Set()
接受一个对象并一一复制所有的基元,但是我希望有一个更简单的解决方案。
编辑:我想证明这不是This question的重复。我将尝试将其用作解决我的问题的方法。如果我制作了C
的深层副本,然后将B
设置为等于它,那么B
会失去对A
的引用(我认为),我不希望这样做。我可以应用该解决方案的另一种方法是在B.Set()
的地方实现我的C
想法,对其进行深复制,然后将所有内容设置为相等。由于这种情况发生在A
内,因此它会发送给 A
。那能解决我的问题吗?有人看到该解决方案有问题吗?