亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

輸出結果為1,2.為什么???

public class ParamaterDemo {public static void main(String[] args) {int a = 1;update(a);System.out.println(a);Koo ko = new Koo();update(ko);System.out.println(ko.a);}static void update(int a) {a++;}static void update(Koo ko){ko.a++;}}class Koo{int a = 1;}
查看完整描述

3 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

用通俗易懂的方式給你解釋解釋!
參數傳遞有兩種方式:
1、傳值
2、傳地址
java中,對于簡單類型(不是對象類型)是傳值;而對于對象類型則是傳地址。
對于傳值操作,例如int a = 1; java會自動復制一個備份變量,他的值與a的值是完全相同的。 update(a);方法之后,其實這個方法中操作的是哪個備份的變量里面的值,而不是a中的值,所以當你在打印的時候,a的值還是原來的那個值。
對于參數是對象類型的情況,Koo ko = new Koo();當我們new一個對象的時候,java其實是在內存的堆中開辟了一個小空間,把這個對象放到其中,為了以后我們能訪問到這個對象,jvm會把這個對象在內存中的地址返回給我們,不信你就打印一下 ko 這個對象,看看! 你看到的就是這個對象在內存中的地址信息。所以當你把對象作為參數的時候,jvm就會把該對象的地址交給update(ko)方法,所以當你更改該對象下的屬性值的時候,其實更改的就是原來那個對象的值。所謂跑的了和尚跑不了廟,其實就是這個道理。 可想:如果你的一位朋友想到你家拜訪,你肯定會告訴他,你家是什么什么路、什么什么小區、哪號樓、那單元諸如此類的信息,而這個信息對你是唯一的,這個地址下,就住著你一家人,jvm也是同樣道理。一個地址下,只有一個對象?,F在是不是稍稍明白點了!


查看完整回答
反對 回復 2022-08-08
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

第一次調用updata()函數時你傳遞的參數a就相當于1,a的值并沒有變,在這時函數static void update(int a) {
a++;
}
就相當于static void update(int b) {
b++;
}
所以你顯示的是1。
當你用對象作為參數ko時,語句“ko.a”實際上引用的是a的地址,它就好像是一個實實在在的a。所以當ko.a++時,它的值會改變,這時是2。


查看完整回答
反對 回復 2022-08-08
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

第一個,傳入的是數值1,所以不會改變原來變量A的值。
第二個,傳入的是實例ko的地址,所以在update方法中改變ko.a的值之后
輸出ko.a的值,是改變之后的值。

查看完整回答
反對 回復 2022-08-08
  • 3 回答
  • 0 關注
  • 179 瀏覽

添加回答

了解更多

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號