任何人都知道使用java编程的String.intern()的目的......
如果我使用实习生普通字符串和string.intern()
之间有什么区别答案 0 :(得分:1)
string interning是一种只存储每个不同字符串值的一个副本的方法,该值必须是不可变的。实习字符串使得一些字符串处理任务更加节省时间或空间,代价是在创建或实现字符串时需要更多时间。不同的值存储在字符串实习池中。
另请阅读String pooling
答案 1 :(得分:1)
Interned String存储在String池中,而不是存储在常规堆空间中。在Java 7之前,这个池位于permgen区域,但是从java 7开始,它已被移动到堆以防止{J}崩溃导致java.lang.OutOfMemoryError: PermGen space
错误。
总结具有相同文本的interned字符串(.equals()返回true)将指向字符串池中的相同对象,即使== operation将给出true。使用具有相同内容的new()创建的Normal字符串(.equals()返回true)将给予false ==操作,因为它们指向两个不同的对象。
您可能想要阅读一篇好文章Busting java.lang.String.intern() Myths。我相信它会清除你的大多数疑问(文章还包含你可以执行的Java示例,以便自己查看结果)。