字符串池管理

时间:2016-03-08 02:25:29

标签: java equals string-pool

Strings是不可变对象,存储在字符串池中。假设在应用程序中,没有使用new运算符创建字符串。在这种情况下,是否有必要使用equals方法代替==进行String对象的相等性检查? 我觉得上面问题的答案可能是肯定的,它与字符串池大小有关。 String Pool是如何管理的?内存有限,所以我觉得字符串池也有一定的大小。它是否像LRU缓存一样工作,在池满时丢弃最少使用的字符串?

请提供您宝贵的意见。

我的问题不是关于字符串池的大小。我的问题是如果没有使用new运算符创建字符串,那么使用==将始终是安全的。这个语句是正确的还是会发生在这种情况下,两个字符串引用相同的字符串字符可能会返回false。我知道设计明智我应该总是使用equals方法,但我只想知道语言规范。

1 个答案:

答案 0 :(得分:3)

  

字符串是不可变对象,存储在字符串池中。假设在应用程序中没有使用new运算符创建字符串。在这种情况下还有必要使用equals方法而不是==对于String对象的相等性检查吗?

如果你总是使用equals(),你永远不必担心这个问题的答案,但除非你只计划比较字符串文字,否则情况永远不可能出现。

  

我觉得上面问题的答案可能是肯定的

正确。

  

它与字符串池大小有关。

没有

  

如何管理字符串池?内存有限,所以我觉得字符串池也有一定的大小。

没有

  

它是否像LRU缓存一样工作,在池已满时丢弃使用最少的字符串?

不,但已经intern()编辑的字符串可以从池中进行垃圾收集。