java泛型方法參數(shù)傳遞
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
Java參數(shù),不管是原始類(lèi)型還是引用類(lèi)型,傳遞的都是副本(有另外一種說(shuō)法是傳值,但是說(shuō)傳副本更好理解吧,傳值通常是相對(duì)傳址而言)。
如果參數(shù)類(lèi)型是原始類(lèi)型,那么傳過(guò)來(lái)的就是這個(gè)參數(shù)的一個(gè)副本,也就是這個(gè)原始參數(shù)的值,這個(gè)跟之前所談的傳值是一樣的。如果在函數(shù)中改變了副本的值不會(huì)改變?cè)嫉闹怠?/p>
如果參數(shù)類(lèi)型是引用類(lèi)型,那么傳過(guò)來(lái)的就是這個(gè)引用參數(shù)的副本,這個(gè)副本存放的是參數(shù)的地址。如果在函數(shù)中沒(méi)有改變這個(gè)副本的地址,而是改變了地址中的 值,那么在函數(shù)內(nèi)的改變會(huì)影響到傳入的參數(shù)。如果在函數(shù)中改變了副本的地址,如new一個(gè),那么副本就指向了一個(gè)新的地址,此時(shí)傳入的參數(shù)還是指向原來(lái)的 地址,所以不會(huì)改變參數(shù)的值。
基本類(lèi)型參數(shù)傳遞:不改變值
引用類(lèi)型參數(shù)傳遞:改變值
無(wú)論是什么語(yǔ)言,要討論參數(shù)傳遞方式,就得從內(nèi)存模型說(shuō)起,主要是我個(gè)人覺(jué)得從內(nèi)存模型來(lái)說(shuō)參數(shù)傳遞更為直觀(guān)一些。閑言少敘,下面我們就通過(guò)內(nèi)存模型的方式來(lái)討論一下Java中的參數(shù)傳遞。
這里的內(nèi)存模型涉及到兩種類(lèi)型的內(nèi)存:棧內(nèi)存(stack)和堆內(nèi)存(heap)?;绢?lèi)型作為參數(shù)傳遞時(shí),傳遞的是這個(gè)值的拷貝。無(wú)論你怎么改變這個(gè)拷貝,原值是不會(huì)改變的。看下邊的一段代碼,然后結(jié)合內(nèi)存模型來(lái)說(shuō)明問(wèn)題:
publicclassParameterTransfer { publicstaticvoidmain(String[] args) { intnum = 30; System.out.println( “調(diào)用add方法前num=”+ num); add(num); System. out.println( “調(diào)用add方法后num=”+ num); } publicstaticvoidadd( intparam) { param = 100; } }
這段代碼運(yùn)行的結(jié)果如下:
調(diào)用 add方法前 num= 30調(diào)用 add方法后 num= 30
程序運(yùn)行的結(jié)果也說(shuō)明這一點(diǎn),無(wú)論你在add()方法中怎么改變參數(shù)param的值,原值num都不會(huì)改變。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%