一、值傳遞
方法呼叫時,實際引數把它的值傳遞給對應的形式引數,函式接收的是原始值的乙個copy,
此時記憶體中存在兩個相等的基本型別,即實際引數和形式引數
,後面方法中的操作都是對形參這個值的修改,不影響實際引數的值
。看下面這個值傳遞的例子。
public
class
transfertest
public
static
void
changenum(
intx)
}輸出結果:
changenum()方法呼叫之前:num =
1changenum()方法呼叫之前:num =
1二、引用傳遞
也稱為傳位址。方法呼叫時,實際引數的引用(位址,而不是引數的值)被傳遞給方法中相對應的形式引數,函式接收的是原始值的記憶體位址;
在方法執行中,形參和實參內容相同,指向同一塊記憶體位址,方法執行中對引用的操作將會影響到實際物件
。看下面這個例子
。public
static
void
main
(string args) ;
change(arr);
system.out.println(arr[
0]);
}//將陣列的第乙個元素變為0
public
static
void
change
(int
array)
注意:考慮string,以及integer、double等幾個基本型別包裝類,它們都是immutable型別,而stringbuffer、stringbuilder是mutable型別
。因為沒有提供自身修改的函式,每次操作都是新生成乙個物件,所以要特殊對待,可以認為是和基本資料型別相似,傳值操作。
看下面例子。
public
class
referencepkvalue1
public
void
change(string str)
public
void
change(stringbuffer str)
}
輸出是:
hello
helloworld
對string和stringbuffer的操作產生了不同的結果。
結論:(1)基本資料型別傳值,對形參的修改不會影響實參;
(2)引用型別傳引用,形參和實參指向同乙個記憶體位址(同乙個物件),所以對引數的修改會影響到實際的物件;
(3)string, integer, double等immutable的型別特殊處理,可以理解為傳值,最後的操作不會修改實參物件。
java 值傳遞和引用傳遞
值傳遞 方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。引用傳遞 也稱為傳位址。方法呼叫時,實際引數的引用 位址,而不是引數的值 被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,方法執行中形式引數值的改變將會...
Java的值傳遞和引用傳遞
值傳遞 值傳遞是基本資料型別的資料傳遞,是棧中的資料 基本資料型別的資料作為方法的引數進行傳遞,那麼在方法中會另外開闢乙個新的記憶體空間,跟原來的記憶體空間不是乙個記憶體空間,如果在方法中對引數的值進行更改,不糊影響原來的記憶體空間的值 如果非要獲取方法中修改後的值,則需要把修改後的值返回出來 引用...
值傳遞和引用傳遞
幾乎每種語言都有值傳遞和引用傳遞.下面是我的一些曲解,只講現象,不涉及到任何的原理,主要是鬧著玩的.a 新交了個女朋友b.有一天他女朋友b看見a在吃冰激凌,b想吃,但是a是個 座有點小潔癖,不想讓b吃,於是給b買了個新的冰激凌說你吃這個吧,別碰我嘴裡這個.這就是值傳遞.a和b的值沒有任何關係,他們一...