1. 程式人生 > >我被HR問到的問題-3

我被HR問到的問題-3

一個 blog .com mage 出棧 改變 images src log

  你認為我說java是傳引用對嗎?

  首先在Java中不存在引用傳遞,是以值傳遞的具體可以看一下面這個例子。

  技術分享

  運行結果

  技術分享

  1.首先運行mian方法入棧,給x,y變量分配地址,接下來執行operator方法,此時operator放入棧,其分配地址給形參x,y;當運行operator的時候且傳入x,y此時形參x,y的分別指向了內存中值為x和值為y的地址(常量池中的)。

  2. 在operator中操作的x,y是形參的而不是main方法中的,可以理解成就近原則吧。當運行x=x+y;的時候會將x和y拼接起來,此時x的地址不在指向之前常量池中的x地址了,而是指向一個新的地址xy。此時輸入的時候自然就是xy咯。

  3.運行y=x;就是將operator的形參x執行的地址賦給了y,所以此時y輸出來的值就是xy.

  4.運行完operator方法就將其彈出棧。(這和棧的數據結構設計有關)所有的給operator方法分配的空間也就消失了。

  5.運行輸出語句發現x和y沒有發生改變。這是因為在operator方法中的操作始終是在對自己的形參在操作。

  所以可以理解成Java是值傳遞(地址值),而不是引用傳遞。

我被HR問到的問題-3