我知道字符串在java中是不可变的,我只是读了一些关于它的理论 一旦声明了String,就无法更改。我声明了一个字符串,只是通过附加一些值来改变它的值。它应该不会发生
String s = "amol";
s = s + "abc";
System.out.println(s); //output is amolabc
答案 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