Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-创建对同一对象的两个引用_Java_Design Patterns_Reference - Fatal编程技术网

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
是第一个。