一、字符串常量Java內部加載

問:下圖1、2的結果分別是什麼?

答:1=true、2=false。

String:intern()是一個本地方法,它會查找字符串常量池中具有相同內容的String常量對象,如果沒有找到,則將自身包含的字符串添加到常量池中,並返回此String對象的引用。因此第一次調用"alibaba".inetrn()會把"alibaba"字符串對象添加至常量池,並返回該對象的引用,圖1的判斷換過來說就是同一個引用對象在進行對比,所以返回true。

圖二的重點在於這裏其實是兩個不同的引用對象在判斷。Java程序在啓動的時候會加載類sun.misc.Version,該類有一個屬性值爲java的字符串會被添加進常量池中。因此在調用str.intern()方法時,由於常量池中已經存在java的引用對象,所以是兩個不同的引用對象在進行判斷,結果爲false。
如果圖一處再增加new String("alibaba")==str1.intern()的判斷,和圖二同樣的道理,結果爲false。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章