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

请问两种方式是否等价?

    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 byString 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

      • 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.
🎜 🎜🎜 🎜🎜 🎜 🎜 🎜🎜 🎜 🎜
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板