java - 如果我们更改字符串值,字符串池如何管理引用?

标签 java string

如果我们有一个 String s = "Hello"它将在字符串池中创建字符串 "Hello"并且一些引用指向字符串 s 如果我更改 s="World"会怎样。在字符串池中它将创建新的 String "World”,现在我的引用指向 World。 “Hello”字符串会发生什么?

最佳答案

来自documentation of String :

... 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/

相关文章:

java - 测量字符串和字体宽度

c++ - 解析一个奇怪的字符串C++

java - Java 11 中 String trim() 和 strip() 方法的区别

java - 使用 BigInteger 在 Java 中手动实现 RSA

java - Jersey json web 服务客户端实现

java - 在 Grails 中使用 Java 类(具有 Spring/Hibernate 依赖项的整个模块)

java - 字节到字符串| java

Javac 1.8.0_25 存在已知错误 - 如何使用不同版本?

java - 每天将数百万条记录从 sql server 移动到 oracle

javascript - 如何从具有顺序号的值创建有序数组?