Java值傳遞
阿新 • • 發佈:2017-06-18
int println out 著圖 color obj 參考 通過 com
對於Java的值傳遞, 你真的了解麽? Java裏面只有值傳遞, 這個值是什麽? 如果是基本數據類型。 你也許回答的很幹脆。 但如果是Object對象呢? 你確定清楚不? 先看下code。
Java代碼
package com.basic; public class Test { /** * @param args */ public static void main(String[] args) { StringBuffer buffer= new StringBuffer("colin"); SChange(buffer); System.out.println( buffer); }public static void SChange (StringBuffer str) { str= new StringBuffer("huang"); } }
上面code, 輸出的結果是什麽? 你對了嗎?
輸出的結果是 colin.
我們修改下code
Java代碼
package com.basic; public class Test { /** * @param args */ public static voidmain(String[] args) { StringBuffer buffer= new StringBuffer("colin"); SChange(buffer); System.out.println( buffer); } public static void SChange (StringBuffer str) { //str= new StringBuffer("huang"); str.append(" huang"); } }
輸出的結果是 colin huang.
為什麽是這樣的結果呢? 下面詳細解釋:
Java確實通過引用來維護Object, 所有的Object變量, 都是一個引用。但Java在方法傳遞中, 確實是值傳遞。 那這個值是什麽呢。 對於Object, 這個值就是傳人的Object的引用。既把這個引用copy了一份。 那麽, 就至少有兩個引用指向了這同一個傳入的Object。 參考下圖:
那麽, 我們就來圖解下上面的那兩個代碼。
下圖圖解代碼一
接著圖解代碼二
代碼一中, copy的那個引用, 指向了一個新的對象。 但原對象還是沒有變化的。
代碼二中, copy的那個引用, 把原對象改變了。
這就是Java的值傳遞。
Java值傳遞