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