我被面試官問到的問題-3

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

  首先在Java中不存在引用傳遞,是以值傳遞的具體能夠看一下面這個例子。數據結構

  

  運行結果設計

  

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

  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是值傳遞(地址值),而不是引用傳遞。im

相關文章
相關標籤/搜索