Java 常量池的實例詳解
Java的常量池中包含了類、接口、方法、字符串等一系列常量值。常量池在編譯期間就已經確定,并保存在*.class文件中
一、對于相同的常量值,常量池中只保存一份拷貝。
而且,當一個字符串由多個字符串常量鏈接而成時,多個字符串被組成一個字符串常量。
例如:
package lxg; public class main { public static void main(String[] args) { String name = "lengxuegang"; String nickname = "lengxuegang"; String signature = "leng" + "xue" + "gang"; System.out.println(name == nickname); System.out.println(name == signature); } }
結果為:
true true
注意:由new String()創建的字符串不是常量,不能在編譯期間確定。因此也就不能放入常量池中,而是有自己的地址空間。
二、常量池在運行期間由JVM裝載,并且可以擴充。
String.intern()方法就是擴充常量池的一個方法。當String的一個對象str調用intern()方法時,Java首先檢索常量池中是否有相同Unicode編碼的字符串常量。如果有,則返回該字符串常量的引用;如果沒有,則在常量池中增加一個Unicode編碼等于str的字符串常量,同時返回該字符串常量的引用。
例如:
package lxg; public class main { public static void main(String[] args) { String name = "lengxuegang"; String nickname = new String("lengxuegang"); System.out.println(name == nickname); //調用intern方法后,nickname指向常量池中"lengxuegang"的引用,此時name與nickname相同 nickname = nickname.intern(); System.out.println(name == nickname); } }
輸出結果為:
false true
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。