第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于java的引用傳遞和值傳遞

關于java的引用傳遞和值傳遞

30秒到達戰(zhàn)場 2019-03-29 22:11:17
publicclassTestArray{publicstaticvoidmain(String[]args){//reviseanarraydirectlywithoutreturnString[]test={"test"};voidReturn(test);System.out.println(test[0]);//reviseanarraydirectlywithreturnString[]test2={"test2"};String[]outtest2=arrayReturn(test2);System.out.println(outtest2[0]);//reviseanarraybyanotherwayString[]test3={"test3"};voidReturn2(test3);System.out.println(test3[0]);}publicstaticvoidvoidReturn(String[]a){String[]b={"b"};a=b;System.out.println("ainvoidReturnis"+a[0]);}publicstaticString[]arrayReturn(String[]a){String[]b={"b"};a=b;System.out.println("ainarrayReturnis"+a[0]);returna;}publicstaticvoidvoidReturn2(String[]a){a[0]="b";System.out.println("ainvoidReturn2is"+a[0]);}}輸出:ainvoidReturnisbtestainarrayReturnisbbainvoidReturn2isbb在傳遞一個引用類型的時候,使引用類型指向別的引用類型,為什么在main方法中的值依然不變?(voidReturn方法)作為返回值傳出,可以修改,這是什么原理?(arrayReturn)對引用了類型直接修改,可以改變值(voidReturn2)表達的很模糊,大概不明確例子中的值怎么傳的。希望可以知道原理和明確的理論,不是只記住這種情況是這樣。
查看完整描述

2 回答

?
jeck貓

TA貢獻1909條經(jīng)驗 獲得超7個贊

首先,Java都是值傳遞(passbyvalue)。
所有的"值"(value)都指向一個對象(primitive類型除外,就是本身)
在傳遞一個引用類型的時候,使引用類型指向別的引用類型,為什么在main方法中的值依然不變?(voidReturn方法)
因為都是value,所以你的只是改了一個value,原來的value以及其所指對象當然都還在。
作為返回值傳出,可以修改,這是什么原理?(arrayReturn)
因為你返回的是一個value,這個value指向一個對象,當然也可以修改。
為了方便理解,你可以把這個值當成一個標簽(primitive類型當然要除外),或者如果有C/C++的基礎,把他們近似的當作pointer/reference。
P.S:Python等語言同理
                            
查看完整回答
反對 回復 2019-03-29
?
茅侃侃

TA貢獻1842條經(jīng)驗 獲得超21個贊

我喜歡把引用理解為“地址”的概念,引用傳值傳的是一份“地址的拷貝”,通過“地址的拷貝”修改對象值可以成功,但通過“地址的拷貝”修改地址是不會生效的,所以voidReturn2可以修改,voidReturn不會修改;
至于arrayReturn,可以看成是返回了一個地址,而String[]outtest2=arrayReturn(test2)這句代碼會讓outtest2拷貝了一份返回的地址,當然是可以取到對象值的。
                            
查看完整回答
反對 回復 2019-03-29
  • 2 回答
  • 0 關注
  • 448 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號