String是一個(gè)很普通的類

上一篇我們講了Java中的數(shù)組,其實(shí)是為本章的內(nèi)容做準(zhǔn)備的,String這個(gè)類是我們在寫Java代碼中用得最多的一個(gè)類,沒有之一,今天我們就講講它,我們打開String這個(gè)類的源碼:

聲明了一個(gè)char[]數(shù)組,變量名value,聲明了一個(gè)int類型的變量hash(hash的作用我們后續(xù)會講),話不多說,上代碼:

我們點(diǎn)開構(gòu)造函數(shù)看一下:

多年以前,我看到這段代碼時(shí)我是懵逼的,沒錯(cuò),我現(xiàn)正在準(zhǔn)備構(gòu)造一個(gè)String的對象,那original這個(gè)對象又是從何而來?是什么時(shí)候構(gòu)造的呢?

在Java中,當(dāng)值被雙引號引起來(如本示例中的"abc"),JVM會去先檢查看一看常量池里有沒有abc這個(gè)對象,如果沒有,把a(bǔ)bc初始化為對象放入常量池,如果有,直接返回常量池內(nèi)容。下圖是預(yù)先處理String str = new String("abc")的參數(shù)"abc"

接下來處理new關(guān)鍵字,在堆內(nèi)存中開辟空間,由于hash這個(gè)字段是int類型的,成員變量初始化默認(rèn)值為0。

處理構(gòu)造函數(shù)邏輯,hash是值類型,直接賦值,數(shù)組為引用類型,直接指向地址。

繼續(xù)上圖

最后執(zhí)行String str2 = new String("abc"),結(jié)果如下圖:

利用IDE的debug功能看一下,char數(shù)組里已經(jīng)有了'a','b','c'這些值。

下面我們來看一下String這個(gè)類下面這些常用的API是如何實(shí)現(xiàn)的:

很簡單對吧,可怕的不是源碼難讀,而是不想,害怕去讀源碼的心。如果文章得到了你的認(rèn)可,請為我的文章點(diǎn)贊,你的贊同是我繼續(xù)下去的動力。

來源:知乎

來源鏈接:https://zhuanlan.zhihu.com/p/63430703

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 上一篇我們講了Java中的數(shù)組,其實(shí)是為本章的內(nèi)容做準(zhǔn)備的,String這個(gè)類是我們在寫Java代碼中用得最多的一...
    清淺池塘V閱讀 493評論 0 1
  • String 的聲明 由 JDK 中關(guān)于String的聲明可以知道: 不同字符串可能共享同一個(gè)底層char數(shù)組,例...
    CodeKing2017閱讀 1,757評論 1 2
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,457評論 0 16
  • 注:都是在百度搜索整理的答案,如有侵權(quán)和錯(cuò)誤,希告知更改。 一、哪些情況下的對象會被垃圾回收機(jī)制處理掉 ?當(dāng)對象對...
    Jenchar閱讀 3,312評論 3 2
  • 第01章 JAVA簡介第02章 基礎(chǔ)語法第02章 遞歸補(bǔ)充第03章 面向?qū)ο蟮?4章 異常處理第05章 數(shù)組第06...
    順毛閱讀 565評論 0 1

友情鏈接更多精彩內(nèi)容