如何在Java中只引用对象时将对象分配给另一个对象?

问题描述:

我使用Java和有我做的这样一个名单不同的对象:如何在Java中只引用对象时将对象分配给另一个对象?

objx o1; 
objx o2; 
objx o3; 

objx olist [] = { o1, o2, o3 }; 

现在我要指派其他物体原来的对象O1-O3但使用名单。

喜欢的东西:

olist[0] = onew; 

但在这种情况下,只有列表中得到改变,而不是原来的对象O1。我怎样才能在Java中做到这一点?

+0

出于好奇,这只是一个排练项目或一些真实的生活场景? – heikkim 2012-04-26 08:09:29

你不能。但是,您可以只存储数组,然后您将能够更改数组中每个位置引用的对象。

E.g.

objx olist[] = new objx[ 3 ]; 

olist[ 0 ] = new objx(); 
olist[ 1 ] = new objx(); 
olist[ 2 ] = new objx(); 

后来的后来,你可以简单地通过索引阵列改变任何引用的对象:

... 

olist[ 1 ] = onew; 
+0

这看起来不错,很容易在我的代码中实现。谢谢。 – HardCoder 2012-04-26 08:10:28

你不行。 o1只是你堆中某个地址的引用,如果你赋值o1另一个值,它只是指向其他地址。

如果您需要更改对象o1指向的“内容”,您必须更改(可能通过setter)其属性的值。

你必须使用的容器对象。即一个包含对“objx”对象的引用的对象。最简单的容器对象将是一个元素的数组,但它是一个非常难看且容易出错的解决方案。

请注意,为了简洁起见,我省略了存取方法。你通常不应该像我在这里一样使用直接成员访问。

public class ObjxContainer { 
    public Objx objx; 
} 

... 

ObjxContainer o1; 
ObjxContainer o2; 
ObjxContainer o3; 
ObjxContainer[] arr = new ObjxContainer[] { o1, o2, o3 }; 

现在,在访问的ObjxContainer将物objx有你想要的效果:

arr[0].objx = new Objx();