最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

String Constant Pool字符串常量池代碼示例

 更新時(shí)間:2025年12月23日 16:12:32   作者:小CC吃豆子  
字符串常量池是JVM中用于緩存字符串的機(jī)制,可以避免重復(fù)字符串的內(nèi)存浪費(fèi),通過直接賦值創(chuàng)建的字符串會(huì)被優(yōu)先存入常量池并復(fù)用,本文介紹String Constant Pool字符串常量池代碼示例,感興趣的朋友跟隨小編一起看看吧

一、核心概念(通俗解釋)

可以把字符串常量池理解成一個(gè)「字符串緩存池」:

  • 當(dāng)你創(chuàng)建字符串(比如 String s = "hello")時(shí),JVM 會(huì)先去常量池里找有沒有內(nèi)容為 "hello" 的字符串。
  • 如果有,直接返回這個(gè)字符串的引用(相當(dāng)于「復(fù)用」);如果沒有,就先在常量池里創(chuàng)建 "hello",再返回引用。
  • 而通過 new String("hello") 創(chuàng)建的字符串,會(huì)在 堆內(nèi)存 新建對象,同時(shí)常量池里也會(huì)創(chuàng)建 "hello"(如果之前沒有),這也是為什么 new String 會(huì)比直接賦值多占用內(nèi)存。

二、代碼示例:直觀理解常量池機(jī)制

public class StringConstantPoolDemo {
    public static void main(String[] args) {
        // 方式1:直接賦值,字符串存入常量池,復(fù)用已有對象
        String s1 = "hello";
        String s2 = "hello";
        // 方式2:new 創(chuàng)建,堆內(nèi)存新建對象,常量池仍會(huì)存"hello"(若不存在)
        String s3 = new String("hello");
        String s4 = new String("hello");
        // 對比引用(== 比較對象地址,equals 比較內(nèi)容)
        System.out.println(s1 == s2);       // true:s1和s2指向常量池同一個(gè)"hello"
        System.out.println(s1 == s3);       // false:s1指向常量池,s3指向堆內(nèi)存對象
        System.out.println(s3 == s4);       // false:s3和s4是堆里兩個(gè)不同對象
        System.out.println(s1.equals(s3));  // true:內(nèi)容相同
        // intern() 方法:將堆中的字符串對象"入池",返回常量池引用
        String s5 = s3.intern();
        System.out.println(s1 == s5);       // true:s5現(xiàn)在指向常量池的"hello"
    }
}

三、關(guān)鍵知識點(diǎn)

  • 存儲(chǔ)位置
    • JDK 1.6 及之前:常量池位于 方法區(qū)(永久代)
    • JDK 1.7 及之后:常量池被移到 堆內(nèi)存(更靈活,避免永久代內(nèi)存溢出)。
  • 核心方法:intern ()
    • 作用:將當(dāng)前字符串對象的內(nèi)容存入常量池(若不存在),并返回常量池中的引用;
    • 場景:當(dāng)需要復(fù)用動(dòng)態(tài)生成的字符串(比如拼接后的字符串)時(shí),用 intern() 可優(yōu)化內(nèi)存。
  • 字符串拼接的特殊情況
String s1 = "a" + "b";  // 編譯期優(yōu)化,直接等同于"ab",存入常量池
String s2 = "ab";
System.out.println(s1 == s2);  // true
String a = "a";
String b = "b";
String s3 = a + b;  // 運(yùn)行期拼接,會(huì)new String("ab"),存在堆中
System.out.println(s3 == s2);  // false
System.out.println(s3.intern() == s2);  // true

四、實(shí)際應(yīng)用價(jià)值

  • 內(nèi)存優(yōu)化:避免大量重復(fù)字符串占用內(nèi)存(比如業(yè)務(wù)中頻繁使用的固定字符串,如 "success"、"fail");
  • 性能提升:復(fù)用已有對象減少 GC(垃圾回收)壓力,字符串比較時(shí) == 比 equals 更快(但僅適用于常量池字符串)。

總結(jié)

  1. 字符串常量池是 JVM 優(yōu)化字符串內(nèi)存的緩存機(jī)制,直接賦值的字符串會(huì)優(yōu)先存入常量池并復(fù)用;
  2. new String() 會(huì)在堆創(chuàng)建新對象,可通過 intern() 方法將內(nèi)容入池復(fù)用;
  3. JDK 1.7 后常量池移至堆內(nèi)存,拼接字符串的編譯期 / 運(yùn)行期處理邏輯不同,需注意引用對比的差異。

到此這篇關(guān)于String Constant Pool字符串常量池代碼示例的文章就介紹到這了,更多相關(guān)String Constant Pool字符串常量池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java播放聲音類和一個(gè)簡單示例

    java播放聲音類和一個(gè)簡單示例

    這篇文章主要介紹了一個(gè)java播放聲音類和一個(gè)java播放聲音的應(yīng)用程序,應(yīng)用程序可以單次播放聲音、循環(huán)播放聲音,需要的朋友可以參考下
    2014-03-03
  • java map轉(zhuǎn)Multipart/form-data類型body實(shí)例

    java map轉(zhuǎn)Multipart/form-data類型body實(shí)例

    這篇文章主要介紹了java map轉(zhuǎn)Multipart/form-data類型body實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Spring 中如何根據(jù)環(huán)境切換配置 @Profile

    Spring 中如何根據(jù)環(huán)境切換配置 @Profile

    這篇文章主要介紹了Spring中如何根據(jù)環(huán)境切換配置@Profile的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java從服務(wù)端下載Excel模板文件的兩種方法

    Java從服務(wù)端下載Excel模板文件的兩種方法

    這篇文章主要為大家詳細(xì)介紹了Java從服務(wù)端下載Excel模板文件的兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • SpringBoot中多個(gè)實(shí)現(xiàn)的接口正確注入的六種方式

    SpringBoot中多個(gè)實(shí)現(xiàn)的接口正確注入的六種方式

    在SpringBoot中,正確注入多個(gè)接口實(shí)現(xiàn)包括使用@Autowired和@Qualifier、@Resource注解、構(gòu)造方法注入、@Primary注解、Java配置類以及將所有實(shí)現(xiàn)注入到List或Map中,感興趣的可以了解一下
    2024-10-10
  • 淺談Java中對類的主動(dòng)引用和被動(dòng)引用

    淺談Java中對類的主動(dòng)引用和被動(dòng)引用

    這篇文章主要介紹了淺談Java中對類的主動(dòng)引用和被動(dòng)引用,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • iOS多線程介紹

    iOS多線程介紹

    這篇文章主要介紹了iOS多線程的相關(guān)知識,涉及到對進(jìn)程,線程等方面的知識講解,本文非常具有參考價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • JavaFX實(shí)現(xiàn)石頭剪刀布小游戲

    JavaFX實(shí)現(xiàn)石頭剪刀布小游戲

    這篇文章主要為大家詳細(xì)介紹了JavaFX實(shí)現(xiàn)石頭剪刀布小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • gitlab-runner結(jié)合docker部署項(xiàng)目全過程

    gitlab-runner結(jié)合docker部署項(xiàng)目全過程

    本文介紹了使用GitLab和GitLab Runner自動(dòng)化構(gòu)建Spring Boot項(xiàng)目的方法,搭建好GitLab和GitLab Runner后,在Spring Boot項(xiàng)目中創(chuàng)建.gitlab-ci.yml文件,配置腳本準(zhǔn)備Maven編譯項(xiàng)目、打包JAR包及運(yùn)行JAR包,并在設(shè)置中配置CI/CD,這樣,點(diǎn)擊項(xiàng)目CI/CD即可自動(dòng)化運(yùn)行
    2026-05-05
  • Java制作智能拼圖游戲原理及代碼

    Java制作智能拼圖游戲原理及代碼

    本文給大家分享的是使用Java實(shí)現(xiàn)智能拼圖游戲的原理,以及實(shí)現(xiàn)的源碼,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03

最新評論

介休市| 吉安市| 襄樊市| 郯城县| 古丈县| 潼南县| 尚志市| 鄂伦春自治旗| 潍坊市| 东山县| 通州市| 阿拉善右旗| 隆昌县| 浠水县| 瑞金市| 九龙城区| 尼勒克县| 罗平县| 抚远县| 乌恰县| 独山县| 依兰县| 广宁县| 呼和浩特市| 子洲县| 肇州县| 丘北县| 石景山区| 治县。| 墨江| 灌阳县| 宁蒗| 南陵县| 晋城| 鹰潭市| 宾阳县| 康马县| 彰化市| 维西| 丰台区| 珲春市|