【发布时间】:2023-03-31 22:53:01
【问题描述】:
Strings 是不可变对象,存储在字符串池中。假设在应用程序中没有使用new 运算符创建任何字符串。在这种情况下,是否有必要使用equals 方法而不是== 进行String 对象相等性检查?
我觉得上述问题的答案可能是肯定的,它与字符串池大小有关。
字符串池是如何管理的?内存是有限的,所以我觉得字符串池也有一定的大小。它是否像LRU 缓存一样工作,当池已满时丢弃最少使用的字符串?
请提供您宝贵的意见。
我的问题不是关于字符串池的大小。我的问题是,如果没有使用 new 运算符创建任何字符串,那么使用 == 将始终是安全的。此语句是否正确,或者在这种情况下,两个具有相同字符串字符的字符串引用也可能返回 false。我知道在设计方面我应该始终使用 equals 方法,但我只想知道语言规范。
【问题讨论】:
-
我认为无论字符串是否创建通常
new,都应该使用equals()。 -
我和@TimBiegeleisen 在一起。当然,在某些情况下您可以使用
==,但我认为它只是说“看看我有多聪明。我打败了系统”。然后有一天它停止工作,你看起来不再那么聪明了。即使它继续工作。审查您的代码的每个人都会拿起它,您必须解释 - 直到您厌倦它并在您的代码中评论每个stringOne == stringTwo来解释它是有效的,因为您太聪明了。只需按照正常方式进行即可,避免所有问题!
标签: java equals string-pool