如果你有两个String实例,并且它们是相同的,那么在Java中它们将共享相同的内存.这是如何在引擎盖下实施的?
编辑:我的应用程序使用大量的String对象,其中许多是相同的.使用Java String常量池的最佳方法是什么,以避免创建自定义flyweight实现?
我理解java的字符串实习的基本思想,但我想弄清楚它发生在哪些情况,以及我需要做哪些自己的轻量级.
有点相关:
他们一起告诉我这String s = "foo"很好而且String s = new String("foo")很糟糕,但没有提到任何其他情况.
特别是,如果我解析一个有很多重复值的文件(比如一个csv),Java的字符串实习会覆盖我还是我需要自己做一些事情?关于字符串实习是否适用于我的其他问题,我得到了相互矛盾的建议
完整的答案有几个片段,所以我在这里总结一下:
默认情况下,java仅实现编译时已知的字符串. String.intern(String)可以在运行时使用,但它执行得不是很好,因此它只适用于较小数量的Strings,你肯定会重复很多次.对于较大的Strings系列,它是拯救的番石榴(参见ColinD的回答).