有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java字符串池管理

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

请提供宝贵的意见

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


共 (1) 个答案

  1. # 1 楼答案

    Strings are immutable objects and are stored in the String Pool. Suppose in an application none of the strings are created using new operator. In this case also is it necessary to use equals method instead of == for String objects equality checks?

    如果您总是使用equals(),您就不必担心这个问题的答案,但是除非您只计划比较字符串文本,否则这种情况永远不会发生

    I feel the answer of above question is probably yes

    and it has something to do with String Pool size.

    没有

    How is the String Pool managed? Memory is limited so I feel String pool also has a definite size.

    没有

    Does it work like LRU cache, discarding the least used Strings when the pool is full?

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