java 字符串池的深入理解
java 字符串池的深入理解
字符串池是Java的一個(gè)特性,可以通過(guò)一段代碼理解。
String a = "Hello";
String b = "Hello";
String c = new String("Hello");
String d = new String("Hello");
System.out.println(a == b);
System.out.println(b == c);
System.out.println(c == d);
System.out.println(a.equals(b));
System.out.println(b.equals(c));
System.out.println(c.equals(d));
結(jié)果是true,false,false,true,true,true。
這里就涉及到字符 串池?!白址亍?,是Java為了提高內(nèi)存利用率而采用的措施:當(dāng)遇到String a = "Hello"; 這樣的語(yǔ)句時(shí),Java會(huì)先在字符串池中尋找是否已經(jīng)存在"Hello"這個(gè)字符串,如果沒(méi)有,則建立字符串"Hello"對(duì)象,然后變量 a 指向這個(gè)地址;然后遇到語(yǔ)句String b = "Hello",這時(shí)字符串池中已經(jīng)有 "Hello"了,所以直接讓變量b也指向這個(gè)地址,省去了重新分配的麻煩。而在Java中,操作符“==”對(duì)于兩個(gè)基本型來(lái)說(shuō),是判斷其內(nèi)容是否相同, 對(duì)于兩個(gè)對(duì)象來(lái)說(shuō),則是判斷其地址是否相同,所以a == b返回 true。那么String c = new String("Hello")又如何處理呢?如果是這種寫法,則不會(huì)去訪問(wèn)字符串池,而是先為變量 c 開(kāi)辟空間,然后將值寫入空間。所以a == c返回false,c == d同樣返回false。至于String的equals方法,因?yàn)樗容^的不是對(duì)象的地址,而是對(duì)象的值,所以都返回true就不奇怪了。
Java虛擬機(jī)有一個(gè)字符串池,保存著幾乎所有的字符串對(duì)象。字符串表達(dá)式總是指向字符串池 中的一個(gè)對(duì)象。使用new操作創(chuàng)建的字符串對(duì)象不指向字符串池中的對(duì)象但是可以使用intern方法使其指向字符串池中的對(duì)象(注:如果池中已經(jīng)有相同的 字符串--使用equals方法確定,則直接返回池中的字符串,否則先將字符串添加到池中,再返回)。池中兩個(gè)相等的字符串如果使用“==”來(lái)比較將返回 真。
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Tomcat報(bào)錯(cuò):HTTP Status 500 (Wrapper cannot find servlet class)
這篇文章主要介紹了Tomcat報(bào)錯(cuò):HTTP Status 500 (Wrapper cannot find servlet class)解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11
一個(gè)處理用戶登陸的servlet簡(jiǎn)單實(shí)例
這篇文章主要介紹了一個(gè)處理用戶登陸的servlet簡(jiǎn)單實(shí)例,可通過(guò)servlet實(shí)現(xiàn)處理用戶登錄的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01
Java設(shè)計(jì)模式之責(zé)任鏈模式(Chain of Responsibility模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之責(zé)任鏈模式(Chain of Responsibility模式)介紹,本文講解了如何使用責(zé)任鏈模式,并給出了4種使用實(shí)例,需要的朋友可以參考下2015-03-03
Springboot集成knife4j實(shí)現(xiàn)風(fēng)格化API文檔
這篇文章主要介紹了Springboot如何集成knife4j實(shí)現(xiàn)風(fēng)格化API文檔,幫助大家更好的使用springboot框架,感興趣的朋友可以了解下2020-12-12
Java實(shí)現(xiàn)將容器 Map中的內(nèi)容保存到數(shù)組
這篇文章主要介紹了Java實(shí)現(xiàn)將容器 Map中的內(nèi)容保存到數(shù)組,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
IDEA2022.1創(chuàng)建maven項(xiàng)目規(guī)避idea2022新建maven項(xiàng)目卡死無(wú)反應(yīng)問(wèn)題
這篇文章主要介紹了IDEA2022.1創(chuàng)建maven項(xiàng)目規(guī)避idea2022新建maven項(xiàng)目卡死無(wú)反應(yīng)問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)
這篇文章主要介紹了詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)的相關(guān)資料,需要的朋友可以參考下2017-02-02
Java的Hibernate框架中復(fù)合主鍵映射的創(chuàng)建和使用教程
復(fù)合主鍵映射用起來(lái)比普通的增加主鍵字段要復(fù)雜,這里我們就來(lái)共同學(xué)習(xí)Java的Hibernate框架中復(fù)合主鍵映射的創(chuàng)建和使用教程,需要的朋友可以參考下2016-07-07

