[有趣] 關於一條有意思的代碼--------成員變量與局部變量

今天看到了一條代碼,感覺很有意思,也正好小慶一下我的博客有博文了,今天是值得紀念的一天,未來的我會爲現在的我感到自豪,話不多說。



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內的每個值,並不用遍歷.

我認爲這段代碼很有意義,很有代表性,涉及的知識點也比較多,總之還是要多練多看.


如果有人發現我寫的有什麼錯誤,請指出,我會及時更改.

我現在準備養成三天一小寫,一週一大寫,多多練習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章