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