關於JAVA中包裝類的是什么類型傳遞這個問題的筆記


背景知識:

如果參數類型是原始類型,那么傳過來的就是這個參數的一個副本,也就是這個原始參數的值。如果在函數中改變了副本的值不會改變原始的值.

如果參數類型是引用類型,那么傳過來的就是這個參數的引用,這個引用存放的是參數的對象地址。如果在函數中沒有改變這個參數的引用地址,而是改變了地址中的 值,那么在函數內的改變會影響到傳入的參數。

如果在函數中改變了參數的引用地址,如new一個,那么函數中的局部變量就指向了一個新的對象地址,此時傳入的參數還是指向原來的地址,所以不會改變參數的值(如下圖)。

 

 

/**
 * 
 * @author ZHOUMI2
* 轉自:http://blog.csdn.net/wuya814070935/article/details/49250773
*/ public class Test { public static void test1(Integer num){ num = new Integer(5); } public static void test2(String str){ str.replace("1", "4"); } public static void main(String[] args) { Integer num = new Integer(1); test1(num); // 輸出結果為1 System.out.println(num.intValue()); String str = new String("123"); test2(str); // 輸出結果為123 System.out.println(str); } }

 

分析: 上述程序很容易讓人誤以為String類型和包裝類型是值傳遞。

其實: String類型和包裝類型都是對象類型,所以必然是引用傳遞。

      但是由於String類和包裝類都被設定成不可變的,沒有提供value對應的setter方法,而且很多都是final的,我們無法改變其內容,所以導致我們看起來好像是值傳遞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM