返回主目录后,为什么此输出保持不变?

时间:2018-12-10 04:59:39

标签: java reference parameter-passing

enter image description here

由于它通过引用传递了对象myOtherSample并使其指向对象s2,因此输出不应变为:4 4.95 4 0吗?

2 个答案:

答案 0 :(得分:1)

  

由于它通过引用传递了对象myOtherSample并使其指向对象s2,因此输出不应变为:4 4.95 4 0吗?

Java总是按值传递:Is Java "pass-by-reference" or "pass-by-value"?

您创建了一个示例对象,并在myOtherSample函数之外使f指向它。通过调用f(myOtherSample,i),将myOtherSample的值(其值为地址的指针)传递到在s函数范围内定义的f。因此,现在指针s指向Sample对象,在这里您可以使用指针j来更改该Sample对象的s值。

但是在将指针s重新分配给在f函数(s=s2)内部创建的新Sample对象之后,myOtherSample指向的Sample对象如果对指针s现在指向的对象进行任何更改,则to不会更改。

这就是代码中发生的事情。您应该进一步了解Java隐式pointer

答案 1 :(得分:1)

它实际上并没有按照您的想法通过引用传递。最好了解引用变量(mySample,myOtherSample,s和s2)实际上只是保存对象在内存中的位置。结果,s是与myOtherSample完全独立的变量。由于myOtherSample是f的参数,因此它仅指向内存中的同一对象。将s =设置为s2时,s不再指向与myOtherSample相同的对象。但是,myOtherSample不受影响,因为它是一个完全独立的变量。这个概念有时可能会很棘手,也许可以研究一下方框箭头图,因为这样做可能会有所帮助。