首页 文章

返回主站后,为什么输出保持不变? [重复]

提问于
浏览
0

这个问题在这里已有答案:

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

2 回答

  • 1

    它实际上并没有以你正在思考的方式通过引用传递 . 最好理解引用变量(mySample,myOtherSample,s和s2)实际上只是保存对象在内存中的位置 . 因此,s是与myOtherSample完全独立的变量 . 它只是指向内存中的同一个对象,因为myOtherSample是f的参数 . 当您将s =设置为s2时,s不再指向与myOtherSample相同的对象 . 但是,myOtherSample不受影响,因为它是一个完全独立的变量 . 这个概念有时可能很棘手,或许可以查看绘制框箭头图,因为这可以提供帮助 .

  • 1

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

    Java始终按值传递:Is Java "pass-by-reference" or "pass-by-value"?

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

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

    这就是你的代码中发生的事情 . 您应该了解有关Java隐式 pointer 的更多信息 .

相关问题