版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——值傳遞和引用傳遞值傳遞:(形式參數(shù)類(lèi)型是基本數(shù)據(jù)類(lèi)型):方法調(diào)用時(shí),實(shí)際參數(shù)把它的值傳遞給對(duì)應(yīng)的形式參數(shù),形式參數(shù)只是用實(shí)際參數(shù)的值初始化自己的存儲(chǔ)單元內(nèi)容,是兩個(gè)不同的存儲(chǔ)單元,所以方法執(zhí)行中形式參數(shù)值的改變不影響實(shí)際參數(shù)的值。
引用傳遞:(形式參數(shù)類(lèi)型是引用數(shù)據(jù)類(lèi)型參數(shù)):也稱(chēng)為傳地址。方法調(diào)用時(shí),實(shí)際參數(shù)是對(duì)象(或數(shù)組),這時(shí)實(shí)際參數(shù)與形式參數(shù)指向同一個(gè)地址,在方法執(zhí)行中,對(duì)形式參數(shù)的操作實(shí)際上就是對(duì)實(shí)際參數(shù)的操作,這個(gè)結(jié)果在方法終止后被保存了下來(lái),所以方法執(zhí)行中形式參數(shù)的改變將會(huì)影響實(shí)際參數(shù)。
Java:按值傳遞還是按引用傳遞詳細(xì)講解
前天在做系統(tǒng)的時(shí)候被Java中參數(shù)傳遞問(wèn)題卡了一下,回頭查閱了相關(guān)的資料,對(duì)參數(shù)傳遞問(wèn)題有了新的了解和把握,但是有個(gè)問(wèn)題感覺(jué)還是很模糊,就是Java中終究是否只存在值傳遞,由于在查閱資料時(shí),經(jīng)??吹接腥苏f(shuō)Java只有值傳遞,但有人說(shuō)既有值傳遞,也有引用傳遞,對(duì)于兩個(gè)觀(guān)點(diǎn)個(gè)人覺(jué)得應(yīng)當(dāng)是站的角度不同而得出兩個(gè)不同的說(shuō)法,其實(shí)兩個(gè)說(shuō)法其中的原理是一樣的,只要咱們懂得其中的原理,那么至于叫什么也就無(wú)所謂了,下面是我在網(wǎng)上看到的一個(gè)帖子,解釋的感覺(jué)挺全面,就轉(zhuǎn)過(guò)來(lái),以供以后學(xué)習(xí)參考:
1:按值傳遞是什么
指的是在方法調(diào)用時(shí),傳遞的參數(shù)是按值的拷貝傳遞。例如如下:
[java]viewplaincopy
1.2.3.4.5.6.7.8.9.publicclassTempTest{privatevoidtest1(inta){//做點(diǎn)事情}publicstaticvoidmain(String[]args){TempTestt=newTempTest();inta=3;t.test1(a);//這里傳遞的參數(shù)a就是按值傳遞}10.}
按值傳遞重要特點(diǎn):傳遞的是值的拷貝,也就是說(shuō)傳遞后就互不相關(guān)了。例如如下:
[java]viewplaincopy
1.2.3.4.5.6.7.8.9.publicclassTempTest{privatevoidtest1(inta){a=5;System.out.println(\方法中的a=\+a);}publicstaticvoidmain(String[]args){TempTestt=newTempTest();inta=3;t.test1(a);//傳遞后,test1方法對(duì)變量值的改變不影響這里的a10.System.out.println(〞main方法中的a=〞+a);11.}12.}運(yùn)行結(jié)果是:
[java]viewplaincopy
1.2.test1方法中的a=5main方法中的a=3
2:按引用傳遞是什么
指的是在方法調(diào)用時(shí),傳遞的參數(shù)是按引用進(jìn)行傳遞,其實(shí)傳遞的引用的地址,也就是變量所對(duì)應(yīng)的內(nèi)存空間的地址。例如如下:
[java]viewplaincopy
1.2.3.4.5.6.7.8.9.publicclassTempTest{privatevoidtest1(Aa){}publicstaticvoidmain(String[]args){TempTestt=newTempTest();Aa=newA();t.test1(a);//這里傳遞的參數(shù)a就是按引用傳遞}}10.classA{11.publicintage=0;12.}
3:按引用傳遞的重要特點(diǎn)
傳遞的是值的引用,也就是說(shuō)傳遞前和傳遞后都指向同一個(gè)引用(也就是同一個(gè)內(nèi)存空間)。例如如下:
[java]viewplaincopy
1.2.3.4.5.6.7.8.9.publicclassTempTest{privatevoidtest1(Aa){a.age=20;System.out.println(\方法中的age=\+a.age);//20}publicstaticvoidmain(String[]args){TempTestt=newTempTest();Aa=newA();//age=0a.age=10;10.t.test1(a);11.System.out.println(〞main方法中的age=〞+a.age);12.}13.}14.classA{15.publicintage=0;16.}運(yùn)行結(jié)果如下:
[java]viewplaincopy
1.2.test1方法中的age=20main方法中的age=20
4:理解按引用傳遞的過(guò)程——內(nèi)存分派示意圖
要想正確理解按引用傳遞的過(guò)程,就必需學(xué)會(huì)理解內(nèi)存分派的過(guò)程,內(nèi)存分派示意圖可以輔助我們?nèi)ダ斫膺@個(gè)過(guò)程。用上面的例子來(lái)進(jìn)行分析:
(1):運(yùn)行開(kāi)始,運(yùn)行第8行,創(chuàng)立了一個(gè)A的實(shí)例,內(nèi)存分派示意如下:
(2):運(yùn)行第9行,是修改A實(shí)例里面的age的值,運(yùn)行后內(nèi)存分派示意如下:
(3):運(yùn)行第10行,是把main方法中的變量a所引用的內(nèi)存空間地址,按引用傳遞給test1方法中的a變量。請(qǐng)注意:這兩個(gè)a變量是完全不同的,不要被名稱(chēng)一致所蒙蔽。內(nèi)存分派示意如下:
由于是按引用傳遞,也就是傳遞的是內(nèi)存空間的地址,所以傳遞完成后形成的新的內(nèi)存示意圖如下:
也就是說(shuō):是兩個(gè)變量都指向同一個(gè)空間。
(4):運(yùn)行第3行,為test1方法中的變量a指向的A實(shí)例的age進(jìn)行賦值,完成后形成的新的內(nèi)存示意圖如下:
此時(shí)A實(shí)例的age值的變化是由test1方法引起的
(5):運(yùn)行第4行,根據(jù)此時(shí)的內(nèi)存示意圖,輸出test1方法中的age=20(6):運(yùn)行第11行,根據(jù)此時(shí)的內(nèi)存示意圖,輸出main方法中的age=20
5:對(duì)上述例子的改變
理解了上面的例子,可能有人會(huì)問(wèn),那么能不能讓依照引用傳遞的值,相互不影響呢?就是test1方法里面的修改不影響到main方法里面呢?
方法是在test1方法里面新new一個(gè)實(shí)例就可以了。改變成下面的例子,其中第3行為新加的:
[java]viewplaincopy
1.2.3.4.5.6.7.8.9.publicclassTempTest{privatevoidtest1(Aa){a=newA();//新加的一行在內(nèi)存中又分派了一個(gè)地址a.age=20;System.out.println(\方法中的age=\+a.age);}publicstaticvoidmain(String[]args){TempTestt=newTempTest();Aa=newA();10.a.age=10;11.t.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 完善衛(wèi)生保健制度
- 衛(wèi)生應(yīng)急保障制度
- 心里衛(wèi)生保健制度
- 衛(wèi)生學(xué)校預(yù)案制度
- 衛(wèi)生安排管理制度
- 員工個(gè)人衛(wèi)生管理制度
- 衛(wèi)生監(jiān)督陳述申辯制度
- 員工宿舍衛(wèi)生清掃制度
- 衛(wèi)生保潔扣款制度
- 衛(wèi)生系統(tǒng)督辦制度
- 全國(guó)青少年軟件編程等級(jí)考試scratch等級(jí)考試三級(jí)模擬測(cè)試卷2含答案
- 人力資源服務(wù)安全培訓(xùn)
- 生物質(zhì)能燃料供應(yīng)合同
- GB/T 45078-2024國(guó)家公園入口社區(qū)建設(shè)指南
- 安全生產(chǎn)標(biāo)準(zhǔn)化基本規(guī)范評(píng)分表
- 附件3:微創(chuàng)介入中心評(píng)審實(shí)施細(xì)則2024年修訂版
- 嗜血細(xì)胞綜合征查房
- 財(cái)務(wù)共享中心招聘筆試環(huán)節(jié)第一部分附有答案
- 安徽紅陽(yáng)化工有限公司年產(chǎn)1萬(wàn)噸有機(jī)酯(三醋酸甘油酯)、5500噸醋酸鹽系列產(chǎn)品擴(kuò)建項(xiàng)目環(huán)境影響報(bào)告書(shū)
- 汽車(chē)各工況下輪轂軸承壽命計(jì)算公式EXCEL表
- 教務(wù)工作的培訓(xùn)內(nèi)容
評(píng)論
0/150
提交評(píng)論