指针与Java和字符串变量
这个问题在这里已经有了答案:
首先你要分配值“hello”(在内存中的某个地方)来test :
test --------------> "hello"
然后,您将myname设置为内存中的相同位置。
test --------------> "hello"
/
myname ----------/
然后,你正在分配价值“你好吗?” 在内存中的新位置进行test :
-> "hello"
/
myname ----------/
test --------------> "how are you?"
这些都是关于指针的。
编辑后评论
我不知道代码的其余部分是什么样的,但是如果你想能够更新一个字符串并且让其他的字符串更新引用同时被更新,那么你需要使用一个StringBuilder (或者StringBuffer如果你需要同步),而不是:
StringBuilder test = new StringBuilder("hello");
StringBuilder myname = test;
StringBuilder foo = test;
StringBuilder bar = test;
test.replace(0, test.length(), "how are you?");
Assert.assertEquals("how are you?", test.toString());
Assert.assertEquals("how are you?", myname.toString());
Assert.assertEquals("how are you?", foo.toString());
Assert.assertEquals("how are you?", bar.toString());
从那里得到它?
这听起来像你需要了解引用变量和变量引用的对象之间的区别。 让我们看看你的代码的作用:
String test = "hello";
这将赋值引用变量test以引用值为"hello"的常量String对象。
String myname = test;
现在引用myname引用与test相同的String对象。
test = "how are you ?";
现在, test引用一个新的 String对象,其值为"how are you ?" 。 请注意,这不会像您所看到的那样更改myname 。
问题在于String是不可变的,所以"how are you ?" 是一个新的对象。 因此, myname仍然指的是旧对象"hello" 。
解决方案1:不要使用两个引用。 如果只有一个对象,为什么不在整个代码中使用test呢?
解决方案2:让两个引用指向同一个对象,但使用可变对象。 例如使用StringBuilder或StringBuffer而不是String 。
