String是一個很普通的類 - Java那些事兒

清淺池塘發表於2017-09-28

上一篇我們講了Java中的陣列,其實是為本章的內容做準備的,String這個類是我們在寫Java程式碼中用得最多的一個類,沒有之一,今天我們就講講它,我們開啟String這個類的原始碼:

String是一個很普通的類 - Java那些事兒

宣告瞭一個char[]陣列,變數名value,宣告瞭一個int型別的變數hash(hash的作用我們後續會講),話不多說,上程式碼:

String是一個很普通的類 - Java那些事兒

我們點開建構函式看一下:

String是一個很普通的類 - Java那些事兒

多年以前,我看到這段程式碼時我是懵逼的,沒錯,我現正在準備構造一個String的物件,那original這個物件又是從何而來?是什麼時候構造的呢?

在Java中,當值被雙引號引起來(如本示例中的"abc"),JVM會去先檢檢視一看常量池裡有沒有abc這個物件,如果沒有,把abc初始化為物件放入常量池,如果有,直接返回常量池內容。下圖是預先處理String str = new String("abc")的引數"abc"

String是一個很普通的類 - Java那些事兒

接下來處理new關鍵字,在堆記憶體中開闢空間,由於hash這個欄位是int型別的,成員變數初始化預設值為0。

String是一個很普通的類 - Java那些事兒

處理建構函式邏輯,hash是值型別,直接賦值,陣列為引用型別,直接指向地址。

繼續上圖

String是一個很普通的類 - Java那些事兒

最後執行String str2 = new String("abc"),結果如下圖:

String是一個很普通的類 - Java那些事兒

利用IDE的debug功能看一下,char陣列裡已經有了'a','b','c'這些值。

String是一個很普通的類 - Java那些事兒

下面我們來看一下String這個類下面這些常用的API是如何實現的:

String是一個很普通的類 - Java那些事兒String是一個很普通的類 - Java那些事兒String是一個很普通的類 - Java那些事兒String是一個很普通的類 - Java那些事兒String是一個很普通的類 - Java那些事兒String是一個很普通的類 - Java那些事兒

很簡單對吧,可怕的不是原始碼難讀,而是不想,害怕去讀原始碼的心。如果文章得到了你的認可,請為我的文章點贊,你的贊同是我繼續下去的動力。

注:文中的圖,只是畫物件在JVM中大致的樣子,以方便大家理解。如果大家想更深層次的研究JVM,推薦大家看深入理解java虛擬機器一書。


如果喜歡本系列文章,請為我點贊或順手分享,您的支援是我繼續下去的動力,您也可以在評論區留言想了解的內容,有機會本專欄會做講解,最後別忘了關注一下我。

上一篇:Java中的陣列 - Java那些事兒

下一篇:Java基本資料型別和引用型別 - Java那些事兒


轉載無限歡迎,但請註明「作者」和「原文地址」。轉載請在文中保留此段,感謝您對作者版權的尊重。如需商業轉載或刊登,請聯絡作者獲得授權。


相關文章