Java - 创建对同一对象的两个引用

wil*_*amg 4 java design-patterns reference

检查以下代码:

Object object = new Object();
objectList.add(object);
objectListTwo.add(object);
Run Code Online (Sandbox Code Playgroud)

有没有办法让两个数组都指向同一个对象,这样当我改变object一个数组时,它会改变另一个数组?

谢谢你的帮助!

编辑:转,我的上面的代码完全是这样.问题在我的代码中的其他地方.我为我的困惑道歉...

pai*_*lee 6

两个列表都指向同一个对象.Java正在传递对象的引用(按值).

  • 错了 - Java按值传递*所有*.在非基元的情况下,传递的东西不是对象; 它是对象的引用.请参阅http://c2.com/cgi/wiki?JavaPassesByValue (2认同)

Ant*_*ram 5

取决于你所说的“改变”是什么意思。如果您的意思是在调用 setter 和改变对象时进行更改,那么会观察到这些更改。如果您的意思是完全重新分配或覆盖变量(或引用)的更改,则不会观察到这些更改。

简单点说,你有一个对象,一个数组。

Foo foo = new Foo();
Foo[] foos = new Foo[1];
foos[0] = foo;
Run Code Online (Sandbox Code Playgroud)

数组中的项和变量都引用相同的 Foo。

foo.setBar(7);
int bar = foos[0].getBar(); // will get 7
Run Code Online (Sandbox Code Playgroud)

在数组内部观察到对 foo 引用的对象的更改。

foo = new Foo();
foo.setBar(94);
bar = foos[0].getBar(); // will not get 94
Run Code Online (Sandbox Code Playgroud)

由于 foo 已被重新分配,因此在数组内未观察到此更改。它的 setter 现在正在完全改变一个不同的对象。