Java-创建对同一对象的两个引用
检查以下代码:Java-创建对同一对象的两个引用,java,design-patterns,reference,Java,Design Patterns,Reference,检查以下代码: Object object = new Object(); objectList.add(object); objectListTwo.add(object); 有没有办法让两个数组都指向同一个对象,这样当我在一个数组中更改object时,它会在另一个数组中更改 谢谢你的帮助 编辑:事实证明,我上面的代码正是这样做的。问题出在我代码的其他地方。我为我的困惑道歉…两个列表指向同一个对象。Java正在通过值传递对对象的引用。取决于“更改”的含义。如果您在调用setter和改变对象时
Object object = new Object();
objectList.add(object);
objectListTwo.add(object);
有没有办法让两个数组都指向同一个对象,这样当我在一个数组中更改object
时,它会在另一个数组中更改
谢谢你的帮助
编辑:事实证明,我上面的代码正是这样做的。问题出在我代码的其他地方。我为我的困惑道歉…两个列表指向同一个对象。Java正在通过值传递对对象的引用。取决于“更改”的含义。如果您在调用setter和改变对象时表示更改,则会观察到这些更改。如果您指的是完全重新分配或覆盖变量(或引用)的更改,则不会观察到这些更改 简单地说,假设你有一个对象,一个数组
Foo foo = new Foo();
Foo[] foos = new Foo[1];
foos[0] = foo;
数组中的项和变量都引用相同的Foo
foo.setBar(7);
int bar = foos[0].getBar(); // will get 7
对foo引用的对象的更改是在数组内部观察到的
foo = new Foo();
foo.setBar(94);
bar = foos[0].getBar(); // will not get 94
在数组内部未观察到此更改,因为已重新分配了foo。它的setter现在正在完全改变一个不同的对象 “重新分配或覆盖对象”是什么意思?感谢您的澄清!事实证明,我的问题的根源是代码中的其他地方。但是你的回答确实澄清了问题。@Oli,文本现在不清楚了吗?显然,在一些代码示例之前,您就抓住了我。我认为您应该将其改写为“重新分配或覆盖引用”。错误-Java按值传递所有内容。对于非原语,传递的对象不是对象;它是对一个对象的引用。请看,Java不传递对象,也不通过引用传递对象。实际上,一个对象的引用有三个副本。
Object
是第一个。