java函數的參數傳遞和String類型

以下內容摘自java函數的參數傳遞和String類型 http://www.blogjava.net/thuixy/archive/2009/06/06/280302.html

 

說完了java的String類型,我們最後看看java函數參數的傳遞,到底是值傳遞還是引用傳遞呢?一般的說法是對於基本類型比如int、char是值傳遞,對於對象類型是引用傳遞。這種說法沒錯,但是請看下面的例子

String s=”abc”;

change(s);

System.out.println(s);

public void change(String str)

{

     str=”abcd”;

}

上面的程序會有什麼結果呢?打印abc還是abcd,運行程序會發現打印的是abc,完了,似乎不合乎常理,按理說String 也是對象,應該是引用傳遞纔對啊,有的同學知道java的String類型是不可變類型,會得出結果abc,具體解釋是String就相當於是char[]的包裝類。包裝類的特質之一就是在對其值進行操作時會體現出其對應的基本類型的性質。在參數傳遞時,包裝類就是如此體現的。所以,對於String在這種情況下的展現結果的解釋就自然而然得出了。同樣的,Integer、Float等這些包裝類和String在這種情況下的表現是相同的。下面從函數參數傳遞的方式來理解也可以得出相同的結果

java的參數傳遞本質上都可以認爲是值傳遞,對基本類型自然不必說,對於對象類型,傳遞的是對象的地址,地址是個數字,也是基本類型,所以也還是值傳遞的, 有了這個基礎,上面的題目可以這樣理解,s是字符串abc的地址,調用change方法時,把s的拷貝賦給str,即str也指向abc,但是在方法裏又把str指向abcd,str就是abcd的地址了,但是s還是指向的abc。

發佈了45 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章