【转】 Java中的变量赋值和参数传递
原文地址:http://blog.csdn.net/whmii/article/details/3363667
變量賦值和參數(shù)傳遞是java中兩個(gè)容易讓人迷惑的問(wèn)題。
對(duì)于原始類型(primitives type),java采用值傳遞,這很明顯。然而,當(dāng)傳遞的參數(shù)類型是對(duì)象時(shí),或者兩個(gè)對(duì)象的變量進(jìn)行賦值時(shí),問(wèn)題就有些復(fù)雜,很多初學(xué)者對(duì)此感到迷惑。
實(shí)際上,當(dāng)賦值或者傳遞參數(shù)的時(shí)候,Java采取的都是一種值傳遞。
在下面的代碼中,
當(dāng)執(zhí)行change(a1)時(shí),JVM將a1復(fù)制一份傳遞給A的靜態(tài)函數(shù)change(A a)中的參數(shù)a,注意這里a1和a都是對(duì)象的引用,而不是對(duì)象本身。所以,傳遞的是對(duì)象引用的復(fù)制品。從而a1和a變成同一個(gè)對(duì)象的兩個(gè)不同引用。因此,通過(guò)a1對(duì)對(duì)象的改變,和通過(guò)a對(duì)對(duì)象的改變,具有同樣的效果。打個(gè)比方,有一道帶有復(fù)雜無(wú)比的鎖的門(對(duì)象),這扇門有一把鑰匙(a1)。現(xiàn)在,另外一個(gè)人會(huì)開(kāi)此門(方法change()的定義),他有一把想象中的鑰匙(形參),但他沒(méi)有事實(shí)上的鑰匙。當(dāng)此人需要開(kāi)此門時(shí),怎么辦?他需要一把鑰匙,而主人傳給他的確實(shí)是一把鑰匙,只不過(guò)這把鑰匙是主人原先的鑰匙的復(fù)制品!而這個(gè)復(fù)制品顯然也能打開(kāi)這扇復(fù)雜的門。
同樣,對(duì)于第13行的
a1=a2;
是這樣進(jìn)行的:復(fù)制前,a1和a2分別是兩個(gè)不同對(duì)象的引用,當(dāng)賦值時(shí),a2的值賦給a1,結(jié)果a1的值和a2的值相等,a1變成a2所引用的對(duì)象的另一個(gè)引用,即a1和a2變成同一個(gè)對(duì)象的引用,而這個(gè)對(duì)象是原先a2引用的對(duì)象。原先a1引用的對(duì)象則因?yàn)槭チ怂械囊枚焕占魈幚淼?#xff01;
總結(jié)
以上是生活随笔為你收集整理的【转】 Java中的变量赋值和参数传递的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。