Java的字符串实习生是轻量级吗?

Jos*_*dai 12 java design-patterns flyweight-pattern

Java的String内存池的实现是否遵循flyweight模式?

为什么我有这个疑问,我看到实习生没有涉及外在国家.在GoF我读到内在和外在状态之间应该有一个正确的平衡.但在实习生中,一切都是内在的.

或者我们应该说没有关于属性的严格规则,只是共享对象以减少内存就足以称之为flyweight.

请帮我理解.

Mar*_*nik 5

不管实习如何,Java Stringchar[]通过在字符串和通过substring类似的方法调用从字符串派生的字符串之间共享字符串来利用享元模式。不过,这有一个不利的一面:如果您获取一个大字符串的一个小子字符串,则该大字符串char[]将不符合垃圾回收的条件。

注意:从 OpenJDK 版本 1.7.0_06 开始,上述内容已过时:代码已更改,以便char[]不再在实例之间共享。substring()创建一个新数组。