首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java如何在幕后实现字符串的flyweight模式?

java如何在幕后实现字符串的flyweight模式?
EN

Stack Overflow用户
提问于 2010-05-26 10:51:13
回答 2查看 11.4K关注 0票数 21

如果你有一个字符串的两个实例,并且它们是相等的,那么在Java中它们将共享相同的内存。这是如何在幕后实现的?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-27 04:13:46

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

总结一下:一个字符串包装了一个char[]的子序列。支持char[]永远不会被修改。这不是通过在String类外部泄漏或捕获此char[]来实现的。但是,多个Strings可以共享相同的char[] (请参阅String.substring的实现)。

正如在其他答案中解释的那样,还有一种内部机制。

票数 7
EN

Stack Overflow用户

发布于 2010-05-26 10:59:25

字符串文字在Java中是内嵌的,所以实际上只有一个String对象有多个引用(当它们相等时,并不总是这样)。有关更多详细信息,请参阅java.net文章All about intern()

在JLS的3.10.5 String Literals一节中也有一个很好的例子/解释,它讨论了字符串何时被实例化以及它们何时将是不同的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2909848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档