我怎么能改变相同String的值?

时间:2016-02-19 04:32:32

标签: java string

我知道字符串在java中是不可变的,我只是读了一些关于它的理论 一旦声明了String,就无法更改。我声明了一个字符串,只是通过附加一些值来改变它的值。它应该不会发生

   String s = "amol";
   s = s + "abc";
   System.out.println(s); //output is amolabc

4 个答案:

答案 0 :(得分:1)

字符串s没有改变。当您执行s + "abc"时,它会根据操作结果创建一个新的String对象。

答案 1 :(得分:0)

您需要了解Java中String Pool的概念。请仔细阅读链接 http://www.javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html

答案 2 :(得分:0)

你是对的,字符串是不可变的。在这里,你没有改变String。所有不同的字符串都存储在堆内存中。因此,包含相同字符串的所有变量(例如10个变量)(例如" Hello")将仅占用5个字节的内存。它们都指向同一个位置。不会为每个变量存储单独的实例。 在这里,当你写s = s +" abc"时,一个新字符串" amolabc"在堆中创建,现在变量s只指向堆中的新字符串。你没有修改" amol"的价值。你刚刚创建了一个新的String。

答案 3 :(得分:0)

immutable的含义并不像你想象的那样。不可改变的保证hashcode总是一样的,所以它可以兑现而不用担心变化。这意味着,没有需要在每次使用时计算hashcode

这里你是appending另一个字符串值,可以这样做。但你不能concatenate使用另一个字符串。

通过附加它会创建另一个字符串。

参考here