溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java 常量池的實(shí)例詳解

發(fā)布時(shí)間:2020-09-29 18:14:28 來源:腳本之家 閱讀:119 作者:lxgwm2008 欄目:編程語言

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ì)本站的支持!

向AI問一下細(xì)節(jié)

免責(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)容。

AI