如何在多个对象中引用同一个实例?
假设我有A级:
Class A{
public A relative = null;
public int number = 0;
}
我将创建多个A,而那些A的亲戚将是对其中一个A的引用。
例如: 让我们创建四个A,现在我们有A1,A2,A3,A4。
以下地图将显示(左手边)的亲戚参考(右手边)
A1 => null,
A2 => A1,
A3 => A1,
A4 => A2
我想要达到的目标是: 当我通过(A2.relative.number = 1)修改A1时,也将“应用”到A3的相对(它应该是对同一实例A1的引用)
所以,这是我尝试过的:
使用setter:
public void relateTo(A relative){
this.relative = relative;
}
这不起作用,因为Java正在按值传递引用。这个方法范围内的相对只是一个副本。因此,每当我从外部对其进行任何更改时,都不会对此进行更改。
公开变量并直接访问它
A2.relative = A1;
但不,这不起作用。
我不知道如何实现这一点,任何想法?
答案 0 :(得分:3)
当我通过(A2.relative.number = 1)修改A1时,也会“应用”A3的相对(它应该是对同一实例A1的引用)
通过在同一个对象
中指定两个引用来实现这个原则。示例
A a1 = new A();
A a2 = new A();
A a3 = new A();
a2.relative = a1;
a3.relative = a1;
// Now both a2 relative and a3 relative point to the same A object.
现在,如果我对a2
亲属做出更改,请说
a2.relative.number = 2;
然后a3
亲戚也会改变。
为什么?
这是因为,当您声明一个对象时,您实际上正在处理该对象的指针;不是对象本身。上面代码的作用是创建一个相对,并使两个类指向。
观察我漂亮的艺术作品
答案 1 :(得分:1)
这不起作用,因为Java正在按值传递引用。这个方法范围内的相对只是一个副本。因此,每当我从外部对其进行任何更改时,都不会对此进行更改。
你试过这个吗?
Java按值传递对象引用;对这些引用所做的任何更改都会影响相关对象。与在其他语言中传递指针类似。