这些更改是否会反映在原始变量中?

Will the changes get reflected in the original variable?

提问人:saplingPro 提问时间:11/1/2013 更新时间:11/5/2013 访问量:1676

问:

在下图中,指向 。pperson

p作为对名为 的函数的引用传递。现在,如果我对它们进行任何更改,它们也会反映在?请解释。callFunctionpperson

我知道传递的参数是原始变量的参考值(我希望如此!但我不能再想了。

enter image description here

Java OOP 参数传递 引用

评论

1赞 Peter Lawrey 11/1/2013
Java 总是按值传递引用(以及其他所有内容),并且是引用。这意味着,如果将对象指向更改为,则该对象将更改。pp

答:

8赞 Rahul 11/1/2013 #1

如果您更改 as as like 的详细信息,它将得到反映p

// Nothing done to p before this
p.changeName("Not Sanika Anymore"); // This will be reflected as both point to the same object as references are the same

如果创建一个新 Person 并将其分配给 Person,则它不会p

// New Person for p
p = new Person("New Sanika"); // now this p is pointing to the newly created object's reference
p.changeName("Not Sanika Anymore"); // This won't be reflected

这是因为 java 是纯粹的按值传递的。您要将对象的引用作为值传递给 。callFunction()

Eng.Fouad这个回答以一种非常好的方式解释了这个概念。

评论

1赞 Rahul 11/1/2013
@Eng.Fouad - 当我在最初的日子里学习这个概念时,我只是从你的回答中正确理解了它。从那以后我就有了这个链接。我在回答中也提到它是公平的!:)
1赞 Ajinkya 11/1/2013 #2

是的,因为两个引用都指向同一个 Person 对象。当您使用任何引用更改某些属性时,将更新相同的对象。

1赞 MissingNumber 11/2/2013 #3

只要你改变引用所指向的,它们就会得到反映,因为java会逐个传递参数。members of the objectp

什么??Pass by value

对实际参数(或参数表达式)进行完全计算,并将结果值复制到方法/函数执行期间用于保存形式参数值的位置。该位置通常是应用程序运行时堆栈上的内存块(Java 就是这样处理它的),但其他语言可以以不同的方式选择参数存储。因此,该方法无法与此处的原始引用联系。

所以实现方式不同,这才是其实可以自由玩参考的地方。这里可以在方法中更改引用。Pass by reference