1. 程式人生 > >傳值和傳址

傳值和傳址

如果 bject 發生 ext ask 不變 bool 內存空間 對象

基本數據類型和String類型作為參數時,為傳值方式,只把值傳入方法,不管在方法中怎麽處理這個參數,原值不變;(基本數據類型見博客)

其他引用類型作為參數時,為傳址方式,將指向內存中的地址傳入方法,方法中此內存地址中的值發生變化時,原值也會改變;

(1)如果引用類型的對象通過傳址方式將其指向內存中的地址傳入方法後,方法中使用new關鍵字重新給參數賦值時,會在內存中重新開辟空間,參數指向新的內存空間,此時參數和原對象指向的就不是同一個地址了,參數值的變化不會改變原值;
(2)String型是引用類型,但是String型作為參數,是傳值方式,可以通過以下兩種方式來理解:
<1>String本質上是基本類型的char[],基本類型作為參數時,為傳值方式;
<2> 字符串在內存中是存儲在堆中的一個常量,String對象指向內存中這個常量的地址,通過傳址方式將地址傳入方法後,方法中如果通過字符串給參數賦值,則會重新在堆中創建一個字符串常量,並指向這個地址,原值依然指向原來的字符串常量地址,參數值的變化不會改變原值

引用類型

1、接口interface引用 
2、數組array
3、類Class引用 (Object、String 、Date 、Void、Integer; Long ;Boolean ;Byte等 )

傳值和傳址