關(guān)于Java的傳值問(wèn)題,個(gè)人感覺(jué)書上說(shuō)的都不好,請(qǐng)進(jìn)來(lái)聽(tīng)聽(tīng)我的看法。
關(guān)于值傳遞和引用傳遞的問(wèn)題,我想很多人剛開(kāi)始學(xué)的時(shí)候都會(huì)很迷惑,特別是有些書的文學(xué)水平實(shí)在不敢恭維。
在此,我特在此對(duì)Java的傳值和傳址提出我自己的一個(gè)看法,也許讓你能對(duì)這個(gè)問(wèn)題的理解起到幫助。
首先:值傳遞是很好理解的。比如:
public class test {
int a = 3;
public void plus(int b){
b = b+1;
}
public static void main(String args[])
{
test t = new test();
t.plus(t.a);
System.out.println(t.a);
}
}
輸出的結(jié)果是3.這就是值傳遞。其實(shí)我們可以這樣理解:
在plus(int b)函數(shù)里,int b是作為這個(gè)函數(shù)的一個(gè)局部變量,在調(diào)用這個(gè)函數(shù)的時(shí)候開(kāi)始位這個(gè)變量的內(nèi)存空間。當(dāng)我把變量a傳給這個(gè)函數(shù)的時(shí)候,實(shí)際上是把a(bǔ)變量當(dāng)時(shí)的值拷貝一個(gè)放到變量b的分配空間里,b = b+1;這句改變的只是函數(shù)的局部變量b的值,當(dāng)調(diào)用結(jié)束的時(shí)候,變量b的作用范圍也就結(jié)束了,而你在什么時(shí)候修改了變量a的分配空間呢?當(dāng)然是沒(méi)有啦(除非你理解成變量a的空間整個(gè)放進(jìn)b的空間里:))
而所謂的引用傳遞,我覺(jué)得這個(gè)名次起的很混淆視聽(tīng)。以我自己的理解,一切傳遞都是拷貝傳遞。因?yàn)閷?duì)象的標(biāo)識(shí)符代表的是對(duì)象的存儲(chǔ)地址,所以你把對(duì)象的標(biāo)識(shí)符號(hào)傳遞給函數(shù)的時(shí)候,實(shí)際上是把對(duì)象地址的拷貝傳遞給了函數(shù)。雖然也是拷貝,但是2個(gè)地址拷貝都是指向一個(gè)地址的,所以如果在函數(shù)里修改了對(duì)象,那么也實(shí)際上就修改了原先的值.
歸根到底一句話:Java一切參數(shù)的傳遞都是拷貝傳遞!
在此,我特在此對(duì)Java的傳值和傳址提出我自己的一個(gè)看法,也許讓你能對(duì)這個(gè)問(wèn)題的理解起到幫助。
首先:值傳遞是很好理解的。比如:
public class test {
int a = 3;
public void plus(int b){
b = b+1;
}
public static void main(String args[])
{
test t = new test();
t.plus(t.a);
System.out.println(t.a);
}
}
輸出的結(jié)果是3.這就是值傳遞。其實(shí)我們可以這樣理解:
在plus(int b)函數(shù)里,int b是作為這個(gè)函數(shù)的一個(gè)局部變量,在調(diào)用這個(gè)函數(shù)的時(shí)候開(kāi)始位這個(gè)變量的內(nèi)存空間。當(dāng)我把變量a傳給這個(gè)函數(shù)的時(shí)候,實(shí)際上是把a(bǔ)變量當(dāng)時(shí)的值拷貝一個(gè)放到變量b的分配空間里,b = b+1;這句改變的只是函數(shù)的局部變量b的值,當(dāng)調(diào)用結(jié)束的時(shí)候,變量b的作用范圍也就結(jié)束了,而你在什么時(shí)候修改了變量a的分配空間呢?當(dāng)然是沒(méi)有啦(除非你理解成變量a的空間整個(gè)放進(jìn)b的空間里:))
而所謂的引用傳遞,我覺(jué)得這個(gè)名次起的很混淆視聽(tīng)。以我自己的理解,一切傳遞都是拷貝傳遞。因?yàn)閷?duì)象的標(biāo)識(shí)符代表的是對(duì)象的存儲(chǔ)地址,所以你把對(duì)象的標(biāo)識(shí)符號(hào)傳遞給函數(shù)的時(shí)候,實(shí)際上是把對(duì)象地址的拷貝傳遞給了函數(shù)。雖然也是拷貝,但是2個(gè)地址拷貝都是指向一個(gè)地址的,所以如果在函數(shù)里修改了對(duì)象,那么也實(shí)際上就修改了原先的值.
歸根到底一句話:Java一切參數(shù)的傳遞都是拷貝傳遞!
posted on 2008-01-29 15:03 小鋒 閱讀(1326) 評(píng)論(4) 編輯 收藏 所屬分類: J2SE