3 回答

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在是不是稍稍明白點了!

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。

TA貢獻1853條經驗 獲得超9個贊
第一個,傳入的是數值1,所以不會改變原來變量A的值。
第二個,傳入的是實例ko的地址,所以在update方法中改變ko.a的值之后
輸出ko.a的值,是改變之后的值。
- 3 回答
- 0 關注
- 179 瀏覽