您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java中參數(shù)傳遞是怎樣的”,在日常操作中,相信很多人在Java中參數(shù)傳遞是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中參數(shù)傳遞是怎樣的”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
Java中的參數(shù)傳遞:分為值傳遞和引用傳遞
但本質(zhì)上,Java中只有值傳遞。引用傳遞,其實(shí)可以理解為傳的是類似指針的東西。
值傳遞就是把基本變量的值拷貝一份,傳遞這個拷貝。引用傳遞則是傳遞的引用的地址,也就是該變量在內(nèi)存空間的地址。
只有基本數(shù)據(jù)類型采用值傳遞,特點(diǎn)是傳遞的是值的拷貝,傳遞完后兩者就沒有關(guān)系了。也就是說方法內(nèi)和方法外的值互不相干
基本數(shù)據(jù)類型:
·整型:int,long,byte,short
浮點(diǎn)型:float,double
字符型:char
布爾型:boolean
注:8種基本數(shù)據(jù)類型以外的數(shù)據(jù)類型都為引用類型。
指的是在方法調(diào)用時,傳遞的參數(shù)是按引用進(jìn)行傳遞,其實(shí)傳遞的引用的地址,也就是變量所對應(yīng)的內(nèi)存空間的地址。
傳遞的是一個拷貝,即副本。也就是說,對于一個參數(shù)傳遞,存在兩個地址指向同一個內(nèi)存空間。這里我們可以用內(nèi)存分配示意圖來體現(xiàn)
先說結(jié)論,String類型傳遞與基本數(shù)據(jù)類型的傳遞效果相似。
說明:
String類對象一旦創(chuàng)建,其內(nèi)容不可更改:
String類的所有方法都不會改變String類對象內(nèi)容,要改變String類對象的值就必須創(chuàng)建一個新的String對象。
也就是說,當(dāng)進(jìn)行參數(shù)傳遞時,如果方法內(nèi)對String類對象的值進(jìn)行了修改,那么實(shí)際上是創(chuàng)建了一個新的String類對象,然后讓原來的變量指向它而已。但是這個“原來的變量”是一份拷貝副本,只是一開始創(chuàng)建的時候與主方法中的傳遞的值相同而已,現(xiàn)在改變之后,兩者就毫無關(guān)系了。
1)代碼
public class TestTransOfValue {public static void main(String args[]) { double val; StringBuffer sb1, sb2; String sb3; char s[]={'a','p','p','l','e'}; val = 5.8; sb1 = new StringBuffer("apples"); sb2=new StringBuffer("pears"); sb3 = new String("pear"); modify(val, sb1, sb2,sb3,s); System.out.println(val); System.out.println(sb1); System.out.println(sb2); System.out.println(sb3); System.out.println(s); } public static void modify(double a, StringBuffer r1, StringBuffer r2,String r3,char s[] ) { a = 6.8; r1.append(" taste good"); r2=null; r3="banana"; s[2]='R'; } }
2)運(yùn)行結(jié)果
5.8
apples taste good
pears
pear
apRle
3)解釋:
①val是基本數(shù)據(jù)類型,值拷貝的兩者直接互不影響。所以modify方法內(nèi)對a的操作不影響主方法的val的值 因此val=5.8
②sb1為StringBuffer型,不屬于基本類型,因此是引用傳遞。r1.append()修改了r1地址對應(yīng)的內(nèi)存空間的值,因此sb1的值改變了
③sb2同樣是StringBuffer型,屬于引用傳遞。但r2=null是修改的r2的地址的值而不是r2地址指向的內(nèi)存空間的值,因此sb2指向的還是原來指向的內(nèi)存空間,且內(nèi)存空間的值未被改變。
④sb3為String類型,屬于引用傳遞。但是String類型是一個特殊的類,在方法內(nèi)改變String的值并不能改變主方法中的String的值,因此String仍然是pear
⑤char數(shù)組為引用傳遞,且s[2]=‘R’,確實(shí)修改的是內(nèi)存空間的值,因此char數(shù)組的值被改變
到此,關(guān)于“Java中參數(shù)傳遞是怎樣的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。