0

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

请提供您宝贵的意见。

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

4

1 回答 1

3

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

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

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

正确的。

它与字符串池大小有关。

不。

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

不。

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

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

于 2016-03-08T02:46:57.063 回答