1. 程式人生 > >Java值傳遞

Java值傳遞

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 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"); str.append(" huang"); } }

輸出的結果是 colin huang.

為什麽是這樣的結果呢? 下面詳細解釋:

Java確實通過引用來維護Object, 所有的Object變量, 都是一個引用。但Java在方法傳遞中, 確實是值傳遞。 那這個值是什麽呢。 對於Object, 這個值就是傳人的Object的引用。既把這個引用copy了一份。 那麽, 就至少有兩個引用指向了這同一個傳入的Object。 參考下圖:

技術分享

那麽, 我們就來圖解下上面的那兩個代碼。

下圖圖解代碼一

技術分享

接著圖解代碼二

技術分享

代碼一中, copy的那個引用, 指向了一個新的對象。 但原對象還是沒有變化的。

代碼二中, copy的那個引用, 把原對象改變了。

這就是Java的值傳遞。

Java值傳遞