2013-03-13 74 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

相关问题