Strings
是不可变的对象并存储在字符串池中。假设在应用程序中没有任何字符串是使用new
运算符创建的。在这种情况下,还需要使用equals
方法,而不是对String
对象相等性检查吗? 我觉得上述问题的答案可能是“是”,它与字符串池大小有关。 如何管理字符串池?内存有限,所以我觉得String pool也有一定的大小。它是否像LRU
缓存一样工作,在池满时丢弃最少使用的字符串?字符串池管理
请提供您的宝贵意见。
我的问题不是关于字符串池的大小。我的问题是,如果没有任何字符串使用new运算符,那么使用==将始终是安全的。这个陈述是正确的还是可能发生的,在这种情况下,两个具有相同字符串字符串的字符串可能会返回false。我知道设计明智,我应该总是使用equals方法,但我只是想知道语言规范。
我认为应该使用'equals()',而不管字符串是否被创建为通常的'new'。 –
可能重复[如果字符串池的大小超过?](http://stackoverflow.com/questions/10224476/what-if-size-of-string-pool-exceeds) –
我与@TimBiegeleisen。当然有些情况下你可以使用'==',但我认为它只是说“看看我有多聪明,我打败了系统”。然后有一天它停止工作,你不再那么聪明了。即使它继续工作。每个审查你的代码的人都会选择它,你必须解释 - 直到你厌倦了它,并在你的代码中评论每一个'stringOne == stringTwo'来解释它的工作原理,因为你太聪明了。只要按照正常的方式去做,避免所有问题! – John3136