2013-03-13 72 views
0

我明白,所有的東西都是通過java引用的。但是爲什麼在這種情況下它不起作用呢?我曾認爲它應該打印出「仇恨」而不是「愛」。爲什麼不通過推薦工作?

class Test { 
    static class Str { 
     public String str; 

     public void set(String str) { 
      this.str = str; 
     } 
    } 

    public static void main(String[] args) { 
     Str s = new Str(); 

     String str = "Love"; 

     s.set(str); 
     str = "Hate"; 

     System.out.println(s.str); 
    } 
} 
+4

引用是通過值傳遞的,這就是爲什麼。 – 2013-03-13 00:18:40

+0

請參閱關於[這個問題]的討論(http://stackoverflow.com/questions/5835386/java-string-variable-setting-reference-or-value) – Gus 2013-03-13 00:26:35

+0

在Java中,所有事情都是**按值傳遞**。恰巧,對象的「值」是對其在堆中的位置的引用。 – 2013-03-13 00:28:26

回答

1

main功能,str只是存儲的參考爲一個字符串。在執行str = "hate"時,引用會改變,但原始對象"love"已存儲在s.str中,並保留在那裏。

有關更多說明,請參閱this

1

隨着str = "Hate",你只改變你的本地str引用「恨」; s.str仍然指「愛」,所以這就是印刷。

+0

「s.str仍然指」愛「」這一事實似乎表明,它是通過價值傳遞的,而不是參考。只有當它通過值傳遞時,它纔會影響函數內部的值。那麼,在向函數傳遞參數時,java引用的行爲與C++中的指針不一樣嗎? – user697911 2013-03-13 00:30:32

+0

Java對象引用更像是一個C++指針而不是C++引用,因爲如果更改一個Java對象引用,則使用第一個引用初始化的另一個Java引用仍舊引用舊值。 – rgettman 2013-03-13 00:32:40

+0

因此,在Java中,如果我這樣做: – user697911 2013-03-13 01:13:10

相關問題