欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java字符串常量池示例詳解

 更新時間:2021年08月04日 11:03:48   作者:FhToday  
作為最基礎(chǔ)的引用數(shù)據(jù)類型,Java設(shè)計者為 String 提供了字符串常量池以提高其性能,下面這篇文章主要給大家介紹了關(guān)于Java字符串常量池的相關(guān)資料,需要的朋友可以參考下

為什么會有常量池的概念?

不知道小伙伴們是否有思考過這個問題? 沒有思考也無所謂,小編在這里類比一下,大家就會清晰了。什么是池? 我們聽的最多的池,應(yīng)該是數(shù)據(jù)庫連接池. 為什么會有數(shù)據(jù)庫連接池,其實就是為了節(jié)省資源,提高性能,防止重復(fù)創(chuàng)建連接,避免占用內(nèi)存和網(wǎng)絡(luò)資源。

常量池其實就是跟數(shù)據(jù)庫連接池的目的都是一樣的。那么他是如何實現(xiàn)的呢? 因為常量池是JVM的概念,源碼我們也不好看,所以我們還以連接池來類比。

池化的目標就是緩存和管理

稍微提一點池化的概念,其實就是對資源做一個包裝,在包裝層來加一些對這個資源的屬性信息,比如使用次數(shù),最后操作時間,最長生命周期一樣。然后通過后臺線程對資源包裝層的掃描,來對真實資源的做一個管理。Google的Guava的Cache就是這么做的,我們自己也可以利用 common-pool2 工具包自己來做,或者說池化。

Java字符串常量池

在 JDK 1.7 之前,HotSpot 虛擬機中的字符串常量池都在方法區(qū)中,用永生代實現(xiàn)。JDK 1.7 及以后的版本,字符串常量池移到了堆里。

JDK 1.6 的 String.intern 方法會將首次遇到的 String 對象復(fù)制到永久代,并返回這個對象的引用。

JDK 1.7 的 String.intern 方法不再復(fù)制,而是記錄首次出現(xiàn)的 String 對象的引用。

以下用 JDK 1.8 實驗探究字符串常量池。

// test1
String s1 = "red";
String s2 = "red";
System.out.println(s1 == s2); // true

// test2
String s3 = new String("red");
String s4 = new String("red");
System.out.println(s3 == s4); // false

// test3
System.out.println(s1 == s3); // false

// test4
System.out.println(s3.intern() == s1); // true
System.out.println(s3.intern() == s3); // false
System.out.println(s3.intern() == s4); // false

// test5
String s5 = new String("thunder");
String s6 = s5.intern();
String s7 = "thunder";
System.out.println(s5 == s6); // false
System.out.println(s6 == s7); // true

// test6
String s8 = new String("1") + new String("1");
// String s8 = new StringBuilder().append().toString()
String s9 = s8.intern();
String s10 = "11";
System.out.println(s8 == s9); // true
System.out.println(s9 == s10); // true

常量池可以看作是一個集合,沒有重復(fù)的元素。用雙引號創(chuàng)建的對象直接放到常量池,new 一定會在堆中創(chuàng)建一個新的對象,如果常量池沒有值相同的對象那么會在常量池也創(chuàng)建一個對象。intern 的作用是判斷常量池是否包含值相同的字符串,是則返回這個字符串對象的引用,否則將當(dāng)前實例的引用放到常量池并返回當(dāng)前實例的引用。

另外,字符串的拼接實際上是用了 StringBuilder,所以字符串 s8 的創(chuàng)建會伴隨以下對象的創(chuàng)建:

  • 堆中兩個不同的 String 對象 1
  • 字符串常量池中一個 String 對象 1
  • 一個 StringBuilder 對象
  • 堆中的 String 對象 11

由于 s8 的創(chuàng)建方式不是 new String 而是拼接,所以不會在常量池中創(chuàng)建值為“11”的對象,這也是 test5 和 test6 要對比的問題。

總結(jié)

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

相關(guān)文章

  • Java封裝數(shù)組之動態(tài)數(shù)組實現(xiàn)方法詳解

    Java封裝數(shù)組之動態(tài)數(shù)組實現(xiàn)方法詳解

    這篇文章主要介紹了Java封裝數(shù)組之動態(tài)數(shù)組實現(xiàn)方法,結(jié)合實例形式詳細分析了java動態(tài)數(shù)組的實現(xiàn)原理、操作步驟與相關(guān)注意事項,需要的朋友可以參考下
    2020-03-03
  • Java Arrays工具類用法詳解

    Java Arrays工具類用法詳解

    這篇文章主要介紹了Java Arrays工具類用法,結(jié)合實例形式分析了java Arrays工具類針對數(shù)組元素修改、復(fù)制、排序等操作使用技巧與相關(guān)注意事項,需要的朋友可以參考下
    2019-05-05
  • SpringBoot Swagger2 接口規(guī)范示例詳解

    SpringBoot Swagger2 接口規(guī)范示例詳解

    Swagger(在谷歌、IBM、微軟等公司的支持下)做了一個公共的文檔風(fēng)格來填補上述問題,在本文中,我們將會學(xué)習(xí)怎么使用Swagger的 Swagger2注解去生成REST API文檔,感興趣的朋友一起看看吧
    2023-12-12
  • Java?鏈表實戰(zhàn)真題訓(xùn)練

    Java?鏈表實戰(zhàn)真題訓(xùn)練

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-04-04
  • java并發(fā)編程之同步器代碼示例

    java并發(fā)編程之同步器代碼示例

    這篇文章主要介紹了java并發(fā)編程之同步器代碼示例,分享了相關(guān)代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java C++題解leetcode816模糊坐標示例

    Java C++題解leetcode816模糊坐標示例

    這篇文章主要為大家介紹了Java C++題解leetcode816模糊坐標示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Java8新的異步編程方式CompletableFuture實現(xiàn)

    Java8新的異步編程方式CompletableFuture實現(xiàn)

    這篇文章主要介紹了Java8新的異步編程方式CompletableFuture實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • springboot熱部署知識點總結(jié)

    springboot熱部署知識點總結(jié)

    在本篇文章里小編給大家整理了關(guān)于springboot熱部署的知識點內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • 解決BigDecimal轉(zhuǎn)long丟失精度的問題

    解決BigDecimal轉(zhuǎn)long丟失精度的問題

    這篇文章主要介紹了解決BigDecimal轉(zhuǎn)long丟失精度的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • JAVA加密算法實密鑰一致協(xié)議代碼示例

    JAVA加密算法實密鑰一致協(xié)議代碼示例

    這篇文章主要介紹了JAVA加密算法實密鑰一致協(xié)議代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10

最新評論