Java String 的 intern() 方法问题
ringa_lee
ringa_lee 2017-04-17 16:10:00
0
3
780

请问两种方式是否等价?

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

ringa_lee

모든 응답(3)
小葫芦

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

洪涛

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

PHPzhong
  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 #equals(Object)} 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.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿