这些变化会反映在原始变量中吗?

时间:2013-11-01 07:47:44

标签: java oop parameter-passing pass-by-reference pass-by-value

在下图中,p指向person

p作为对名为callFunction的函数的引用传递。现在,如果我在p进行任何更改,它们是否会反映在person中?请解释一下。

我理解传递的参数是原始变量的参考值(我希望如此!)。但我无法进一步思考。

enter image description here

3 个答案:

答案 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()

Eng.Fouad

This answer以非常好的方式解释了这个概念。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

什么是Pass by value ??

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

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