提问人:saplingPro 提问时间:11/1/2013 更新时间:11/5/2013 访问量:1676
这些更改是否会反映在原始变量中?
Will the changes get reflected in the original variable?
问:
在下图中,指向 。p
person
p
作为对名为 的函数的引用传递。现在,如果我对它们进行任何更改,它们也会反映在?请解释。callFunction
p
person
我知道传递的参数是原始变量的参考值(我希望如此!但我不能再想了。
答:
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 object
p
什么??Pass by value
对实际参数(或参数表达式)进行完全计算,并将结果值复制到方法/函数执行期间用于保存形式参数值的位置。该位置通常是应用程序运行时堆栈上的内存块(Java 就是这样处理它的),但其他语言可以以不同的方式选择参数存储。因此,该方法无法与此处的原始引用联系。
所以实现方式不同,这才是其实可以自由玩参考的地方。这里可以在方法中更改引用。Pass by reference
评论
p
p