在下图中,p
指向person
。
p
作为对名为 的函数的引用传递callFunction
。现在,如果我做出任何改变,p
它们也会反映在 中person
吗?请解释。
我知道传递的参数是原始变量的参考值(我希望如此!)。但我不能再想了。
在下图中,p
指向person
。
p
作为对名为 的函数的引用传递callFunction
。现在,如果我做出任何改变,p
它们也会反映在 中person
吗?请解释。
我知道传递的参数是原始变量的参考值(我希望如此!)。但我不能再想了。
如果你改变了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的这个回答很好地解释了这个概念。
是的,因为两个引用都指向同一个 Person 对象。当您使用任何引用更改某些属性时,将更新相同的对象。
只要您更改members of the object
引用所指向的内容p
,它们就会得到反映,因为 java 按值传递参数。
什么是Pass by value
??
实际参数(或参数表达式)被完全评估,结果值被复制到用于在方法/函数执行期间保存形式参数值的位置。该位置通常是应用程序运行时堆栈上的一块内存(这是 Java 处理它的方式),但其他语言可以选择不同的参数存储。所以这里的方法没有办法与原始参考有联系。
所以Pass by reference
实现方式不同,这实际上是您可以自由参考的地方。这里的引用可以在方法中更改。