java字符串池管理
Strings
是不可变的对象,存储在字符串池中。假设在应用程序中,没有任何字符串是使用new
运算符创建的。在这种情况下,是否有必要使用equals
方法而不是==
进行String
对象的相等性检查?
我觉得上述问题的答案可能是肯定的,它与字符串池大小有关。
如何管理字符串池?内存是有限的,所以我觉得字符串池也有一定的大小。它是否像LRU
缓存一样工作,在池已满时丢弃使用最少的字符串
请提供宝贵的意见
我的问题不是关于字符串池的大小。我的问题是,如果没有一个字符串是使用new运算符创建的,那么使用==将始终是安全的。此语句是否正确,或者在这种情况下,两个具有相同字符串的字符串引用也可能返回false。我知道在设计方面,我应该始终使用equals方法,但我只想知道语言规范
# 1 楼答案
如果您总是使用
equals()
,您就不必担心这个问题的答案,但是除非您只计划比较字符串文本,否则这种情况永远不会发生对
没有
没有
否,但是可以从池中对已
intern()
-ed的字符串进行垃圾收集