Java String 的 intern() 方法问题
澳门威尼斯人官网
澳门威尼斯人官网
当前位置 : 澳门威尼斯人官网 > www.vn99.net

Java String 的 intern() 方法问题

请问两种方式是否等价?

    HashMap map = new HashMap<>;
    map.put"abc", 1; //1
    map.put"abc".intern, 1;//2

.class文件中的常量池,在运行期会被JVM装载,并且可以扩充。String的intern方法就是扩充常量池的一个方法;当一个String实例str调用intern方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用, 如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用.
所以这两个应该是等价的

是等价的,首先你的第二条语句的intern完全是多此一举,“abc”本身就会编译进常量池,所以你的intern不会做什么操作。

  1. HashMap的put方法是会计算key的哈希值,所以不管String是从常量池返回还是new出来的都一样

  2. 从intern方法的注释中看到,它会从String的常量池中找这个字符串,找到了就返回常量池中的字符串,没找到就常量池新增这个字符串,然后返回。

      • When the intern method is invoked, if the pool already contains a

      • string equal to this String object as determined by

      • the {@link #equalsObject} method, then the string from the pool is

      • returned. Otherwise, this String object is added to the

      • pool and a reference to this String object is returned.

栏目列表

广告位

澳门威尼斯人官网