如果这个问题真的很傻,我很抱歉,但我想知道是否有人能告诉我为什么会这样:
String helloString = "hello";
String referenceOfHello = helloString;
helloString = "bye";
System.out.println(referenceOfHello);
,输出为hello。我期待再见输出但是没有发生。 我知道这是一个非常基本的问题,但我一直认为referenceOfHello存储了helloString的内存位置,而不是它的值。
感谢。
答案 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 的值时,实际发生的事情是内存中的另一个位置被分配,新字符串将被写入其中并且引用将指向它。
然而,另一个引用已经链接到旧字符串,并且它不会自动指向新字符串。因此,打印的消息是旧消息。