String類型重新賦值輸出結果不變

今天在刷題時遇到的一個問題,對於初學者來說可能會產生疑惑,我們先來看一下代碼;

public class Example {
    String str = new String("good");
    char[] ch = { 'a', 'b', 'c' };
 
    public static void main(String args[]) {
        Example ex = new Example();
        ex.change(ex.str, ex.ch);
        System.out.print(ex.str + " and ");
        System.out.print(ex.ch);
    }
 
   public static void change(String str, char ch[])      
   {
        str = "test ok";
        ch[0] = 'g';
    }
}

輸出結果:
答案
做完之後一直想不通爲什麼。在別人的幫助下知道答案。
以下爲分析:

賦值分爲直接賦值和以產生對象的方式賦值。上面代碼中good的方式就是創建對象賦值的方式,而test ok是直接賦值。這段代碼就相當於有兩個str對象,剛開始都指向good,在進入change()後,其中一個指向test ok;即一個指向good 一個執行test ok; 所以在最後輸出結果時輸出的依舊爲good

java是一門面向對象的語言。在多次實驗之後發現,創建的對象在其函數裏更新之後,是不變的。

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