答案 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不受影响,因为它是一个完全独立的变量。这个概念有时可能会很棘手,也许可以研究一下方框箭头图,因为这样做可能会有所帮助。