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