如果我们有一个 String s = "Hello"它将在字符串池中创建字符串 "Hello"并且一些引用指向字符串 s 如果我更改 s="World"会怎样。在字符串池中它将创建新的 String "World”,现在我的引用指向 World。 “Hello”字符串会发生什么?
最佳答案
... String objects are immutable ...
String
- 编译时已知的常量也会被特殊处理。它们存储在常量池中。所有“相等”的编译时 String
常量引用相同的 String
对象。这就是原因
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2);
将打印true
。还有一些其他有趣的例子。我写了一个Ideone example a while back这展示了一些有趣的案例。
当对某个非基本类型变量s
重新赋值时,旧对象仍然存在于堆上(只要垃圾收集器认为它不符合收集条件)。改变的是变量 s
的引用位置。在所呈现的情况下,在编译时创建第二个 String
常量,然后 s
引用第二个常量。
关于java - 如果我们更改字符串值,字符串池如何管理引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60020769/