java - 为什么String类要这样设计呢?

标签 java jvm jls

为什么String类的设计方式是该类的实例被池化并且不可变?

谢谢和问候, 维迪亚卡·夏尔马。

最佳答案

字符串对象通常不会被池化 - 只有字符串常量会通过实习自动池化。 (当然,您可以手动调用intern,甚至可以通过HashSet<String>等创建您自己的池。)这只是安全的因为字符串是不可变的 - 确保任何编译都是有意义的-时间常数在内存中只出现一次。

您不想为系统中的每个字符串在实习池中查找字符串(或永远保留它)付出代价,因为可能有许多不同的字符串时间。然而,只要这些类存在,从类加载的字符串常量就会一直存在,并且通过将它们驻留一次,您可以减少 GC 流失所需的内存。

关于java - 为什么String类要这样设计呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7418450/

相关文章:

java - java应用程序的jvm沙箱

java - 方法签名和方法的删除方式不同?

java - Spring + JQuery 动态绑定(bind)

java - 使用 netbeans GUI 构建器 JSlider 放大 JLabel 图标

java - 在 Spring MVC 中包含 swagger 后,无法在 jetty 中运行应用程序

java - 嵌套在接口(interface)中的类

java - JLS如何规定不能在方法中正式使用通配符?

java - SAP Java 堆栈与 ABAP 堆栈的架构差异?

java - 条件 JIT 编译

docker - 当运行 JVM 的 docker 容器达到内存限制时会发生什么?