Java 編程語(yǔ)言只有值傳遞參數(shù)嘿般。當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí)静尼,參數(shù)的值就是該對(duì)象的引用一個(gè)副本担败。指向同一個(gè)對(duì)象,對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變贯要,但對(duì)象的引用(不是引用的副本)是永遠(yuǎn)不會(huì)改變的。
基本類(lèi)型的值傳遞:
先看一個(gè)小例子:
他的輸出結(jié)果是:
從結(jié)果可以看出冬念,在調(diào)用changeValue()方法的前后value的值并沒(méi)有發(fā)生變化趁窃。
為什么呢?
因?yàn)楫?dāng)value作為參數(shù)傳遞給changeValue()方法的時(shí)候急前,傳遞的是內(nèi)存空間中value所指向的存儲(chǔ)單元的值醒陆。傳過(guò)去之后,內(nèi)存空間也為x分配存儲(chǔ)單元裆针,然后x存儲(chǔ)單元的值就是value所傳過(guò)來(lái)的值刨摩。此后,在changeValue()方法中對(duì)x的一切操作都是針對(duì)x所指向的這個(gè)存儲(chǔ)單元世吨,與value所指向的那個(gè)存儲(chǔ)單元沒(méi)有關(guān)系了澡刹!
對(duì)象的值傳遞(理解為引用傳遞不妥)
同樣來(lái)看下例子
他的輸出結(jié)果:
從結(jié)果可以看出,在調(diào)用changeValue()方法的前后name的值發(fā)生了變化另假。
這里的值傳遞我之前是理解為把實(shí)體對(duì)象的地址傳遞過(guò)去了像屋。
但是實(shí)際上這里傳遞的也是引用對(duì)象t2所對(duì)應(yīng)的存儲(chǔ)單元的內(nèi)容。前面基本類(lèi)型所對(duì)應(yīng)的存儲(chǔ)單元的值就是變量的值边篮,而這里存儲(chǔ)單元的內(nèi)容是實(shí)體對(duì)象的地址。那么傳過(guò)去之后奏甫,t1所對(duì)應(yīng)的存儲(chǔ)單元的內(nèi)容也是實(shí)體對(duì)象的地址了戈轿。同樣在changeValue()方法中對(duì)t1的一切操作都是針對(duì)t1所指向的這個(gè)存儲(chǔ)單元,與t2所指向的那個(gè)存儲(chǔ)單元沒(méi)有關(guān)系了阵子!
回顧一下上面的一個(gè)值傳遞的例子思杯,值傳遞,就是將存儲(chǔ)單元中的內(nèi)容傳給調(diào)用函數(shù)中的那個(gè)參數(shù),這里是不是異曲同工色乾,是所謂“值傳遞”誊册,而非“引用傳遞”!暖璧!