日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

Java字符串常量池是什么?為什么要有這種常量池?

時(shí)間:2020-12-10 15:36:21 類(lèi)型:JAVA
字號(hào):    

  ava中的字符串常量池(String Pool)是存儲(chǔ)在Java堆內(nèi)存中的字符串池。我們知道String是java中比較特殊的類(lèi),我們可以使用new運(yùn)算符創(chuàng)建String對(duì)象,也可以用雙引號(hào)(”“)創(chuàng)建字串對(duì)象。

  Java中的字符串常量池

  下圖,清楚地解釋了如何在Java堆內(nèi)存中維護(hù)字符串常量池,以及當(dāng)我們使用不同的方式創(chuàng)建字符串時(shí)在堆內(nèi)存中如何存放

2.png

  之所以有字符串常量池,是因?yàn)镾tring在Java中是不可變(immutable)的,它是String interning概念的實(shí)現(xiàn)。字符串常量池也是亨元模式(Flyweight)的實(shí)例。

  字符串常量池有助于為Java運(yùn)行時(shí)節(jié)省大量空間,雖然創(chuàng)建字符串時(shí)需要更多的時(shí)間。

  當(dāng)我們使用雙引號(hào)創(chuàng)建一個(gè)字符串時(shí),首先在字符串常量池中查找是否有相同值的字符串,如果發(fā)現(xiàn)則返回其引用,否則它會(huì)在池中創(chuàng)建一個(gè)新的字符串,然后返回新字符串的引用。

  如果使用new運(yùn)算符創(chuàng)建字符串,則會(huì)強(qiáng)制String類(lèi)在堆空間中創(chuàng)建一個(gè)新的String對(duì)象。我們可以使用intern()方法將其放入字符串常量池或從字符串常量池中查找具有相同的值字符串對(duì)象并返回其引用


<