Java如何为引擎盖下的字符串实现蝇量模式?

2022-09-02 03:20:52

如果您有两个 String 实例,并且它们相等,则在 Java 中,它们将共享相同的内存。这是如何在引擎盖下实现的?

编辑:我的应用程序使用大量的 String 对象,其中许多是相同的。利用Java String常量池的最佳方法是什么,以避免创建自定义的flyweight实现?


答案 1

如果您有两个 String 实例,并且它们相等,则在 Java 中,它们将共享相同的内存

这实际上不是100%正确的。

这篇博客文章很好地解释了为什么会这样,以及字符串常量池是什么。


答案 2

查看源代码(整个java api的源代码是JDK的一部分)。java.lang.String

总结一下:字符串包装 .这种支持永远不会被修改。这是通过既不泄漏也不在类外捕获它来实现的。但是,多个可以共享相同的内容(请参见 的实现)。char[]char[]char[]StringStringschar[]String.substring

还有实习机制,如其他答案所述。


推荐