Java变量引用

时间:2014-05-06 10:51:08

标签: java

如果这个问题真的很傻,我很抱歉,但我想知道是否有人能告诉我为什么会这样:

String helloString = "hello";
String referenceOfHello = helloString;

helloString = "bye";

System.out.println(referenceOfHello);

,输出为hello。我期待再见输出但是没有发生。 我知道这是一个非常基本的问题,但我一直认为referenceOfHello存储了helloString的内存位置,而不是它的值。

感谢。

3 个答案:

答案 0 :(得分:4)

代码在评论中有解释。

String helloString = "hello"; //creates variable in heap with mem address 1001
String referenceOfHello = helloString; //now referenceOfHello and helloString are poimnting  same object

helloString = "bye"; //now, helloString  pointing diff object say 1002, but still, referenceOfHello  will point to 1001 object

答案 1 :(得分:0)

String helloString = "hello";
String referenceOfHello = helloString;

两者都引用helloString referenceOfHello并指向“hello”对象。

helloString = "bye";

helloString引用现在指向“bye”对象,但referenceOfHello引用仍然指向旧的“hello”对象。

答案 2 :(得分:0)

因此,Java中的字符串是不可变的,因此当您编写

String helloString = "hello";

将引用helloString指向内存中写入“hello”的位置。当你写下一行时:

String referenceOfHello = helloString;

referenceOfHello 也是这样指出的。 但是,当您更改 helloString 的值时,实际发生的事情是内存中的另一个位置被分配,新字符串将被写入其中并且引用将指向它。

然而,另一个引用已经链接到旧字符串,并且它不会自动指向新字符串。因此,打印的消息是旧消息。