溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中參數(shù)傳遞是怎樣的

發(fā)布時間:2022-01-04 17:22:57 來源:億速云 閱讀:139 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Java中參數(shù)傳遞是怎樣的”,在日常操作中,相信很多人在Java中參數(shù)傳遞是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中參數(shù)傳遞是怎樣的”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

前言

Java中的參數(shù)傳遞:分為值傳遞引用傳遞
但本質(zhì)上,Java中只有值傳遞。引用傳遞,其實(shí)可以理解為傳的是類似指針的東西。
值傳遞就是把基本變量的值拷貝一份,傳遞這個拷貝。引用傳遞則是傳遞的引用的地址,也就是該變量在內(nèi)存空間的地址。

1.值傳遞

只有基本數(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ù)類型都為引用類型。

2.引用傳遞

指的是在方法調(diào)用時,傳遞的參數(shù)是按引用進(jìn)行傳遞,其實(shí)傳遞的引用的地址,也就是變量所對應(yīng)的內(nèi)存空間的地址。
傳遞的是一個拷貝,即副本。也就是說,對于一個參數(shù)傳遞,存在兩個地址指向同一個內(nèi)存空間。這里我們可以用內(nèi)存分配示意圖來體現(xiàn)

3.String類型傳遞

先說結(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)系了。

Java中參數(shù)傳遞是怎樣的

4.舉例

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ù)組的值被改變

Java中參數(shù)傳遞是怎樣的

到此,關(guān)于“Java中參數(shù)傳遞是怎樣的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI