0

在下图中,p指向person

p作为对名为 的函数的引用传递callFunction。现在,如果我做出任何改变,p它们也会反映在 中person吗?请解释。

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

在此处输入图像描述

4

3 回答 3

8

如果你改变了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 并将其分配给它,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的这个回答很好地解释了这个概念。

于 2013-11-01T07:50:43.003 回答
1

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

于 2013-11-01T07:51:24.450 回答
1

只要您更改members of the object引用所指向的内容p,它们就会得到反映,因为 java 按值传递参数。

什么是Pass by value??

实际参数(或参数表达式)被完全评估,结果值被复制到用于在方法/函数执行期间保存形式参数值的位置。该位置通常是应用程序运行时堆栈上的一块内存(这是 Java 处理它的方式),但其他语言可以选择不同的参数存储。所以这里的方法没有办法与原始参考有联系。

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

于 2013-11-01T21:34:17.153 回答