Java - 在多个类中具有相同的引用

时间:2013-12-06 15:29:42

标签: java reference instance

如何在多个对象中引用同一个实例?

假设我有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的引用)

所以,这是我尝试过的:

  1. 使用setter:

    public void relateTo(A relative){
        this.relative = relative;
    }
    

    这不起作用,因为Java正在按值传递引用。这个方法范围内的相对只是一个副本。因此,每当我从外部对其进行任何更改时,都不会对此进行更改。

  2. 公开变量并直接访问它

    A2.relative = A1;
    

    但不,这不起作用。

  3. 我不知道如何实现这一点,任何想法?

2 个答案:

答案 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亲戚也会改变。

为什么?

这是因为,当您声明一个对象时,您实际上正在处理该对象的指针;不是对象本身。上面代码的作用是创建一个相对,并使两个指向

enter image description here

观察我漂亮的艺术作品

答案 1 :(得分:1)

  

这不起作用,因为Java正在按值传递引用。这个方法范围内的相对只是一个副本。因此,每当我从外部对其进行任何更改时,都不会对此进行更改。

你试过这个吗?

Java按值传递对象引用;对这些引用所做的任何更改都会影响相关对象。与在其他语言中传递指针类似。