今天看到了一條代碼,感覺很有意思,也正好小慶一下我的博客有博文了,今天是值得紀念的一天,未來的我會爲現在的我感到自豪,話不多說。
public class Fascinating {
String no1 = new String("rejoice");
char[] ch = { 'x', 'y', 'z' };
public void reception(String no1, char ch[]) {
no1 = "displeasure";
ch[0] = 'a';
}
public static void main(String args[]) {
Fascinating fg = new Fascinating();
fg.reception(fg.no1, fg.ch);
System.out.println(fg.no1);
System.out.println(fg.ch);
}
}
就當這是一道題吧
就問no1 與 ch的值爲多少.
A.displeasure ayz
B.rejoice x
C.rejoice ayz
D.displeasure x
這條代碼主要有兩個知識點,一個是關於類的成員變量與局部變量的關係,另一個是關於數組在方法裏的調用,
首先,我們要知道成員變量是在類裏聲明的,其他方法可以直接調用,不需要在方法裏聲明,其次成員變量可以與局部變量重名,但優先級是方法裏聲明的變量優先級大於類裏的成員變量(重點前提是同名)。
這條代碼的重點是主方法調用了成員變量i並傳給了reception,之後再打印no1,可以看到,結果no1打印出來的還是原值”rejoice”,這裏就涉及到內存問題
局部變量在調取成員變量時,內存會分配新的存儲空間將成員變量的值複製進來.
簡單的說就是在方法內聲明一個與成員變量名字相同值相同的變量。
所以reception方法並沒有改變成員變量no1的值
reception方法只是改變了自身方法內no1的值
所以在這裏如果輸出reception方法裏的no1的話是會打印出displeasure的
但是同樣是在同一個方法內,爲什麼數組ch裏的值卻改變了,
數組在方法裏調用方式不同,方法內數組的調用是將指針直接指向成員變量裏的數組,也就是說方法內的數組與成員變量裏的數組用同樣的值,指針都指向成員變量裏的值,不存在上面的”複製”,所以在打印時會將’a’替換’x’.
主要的問題就是數組在方法裏的調用與其他類型不同
所以
no1 : rejoice
ch : ayz
感覺這樣的代碼如果基礎打的不是很牢固的話是很容易弄混.
最後
可能注意到我直接打印出了數組ch,並沒有給數組下標,這裏也十分有趣,要注意我聲明的數組爲char數組,因爲println()方法的重載,會直接打印出char內的每個值,並不用遍歷.
我認爲這段代碼很有意義,很有代表性,涉及的知識點也比較多,總之還是要多練多看.
如果有人發現我寫的有什麼錯誤,請指出,我會及時更改.
我現在準備養成三天一小寫,一週一大寫,多多練習。