在說說Java裏有equals(上) 這篇文章裏,文末咱們提到了String底層是char數組來實現的,好多人當年上學時被二維數組,三維數組嚇哭了吧。咱們今天來說講數組,數組很是的重要,不少經常使用類,好比String等底層都是用數組來實現的,後續咱們會一一講到,多少人好久沒用數組了?是否都在用ArrayList呀?這兒先賣個關子,ArrayList底層也是數組實現的。
數組
所謂數組,是相同數據類型的元素按必定順序排列的集合。如今咱們來看一看數組在內存中的樣子,話很少說,上代碼:ide
這是一段教科書級別的代碼,讓我想起了中學時候學過的文章,孔乙己問:茴香豆的茴字有幾種寫法?先編譯一下,咱們打開編譯好的class文件,反編譯一下看看:工具
三種數組的聲明方式編譯後,最後建立的方式都是同樣的,都給咱們加了new關鍵字,順手還把charArr3的聲明與賦值一體化了,編譯器你管得也太多了吧。評論區裏有人說反編譯後和我反編譯後的代碼不同,本專欄全部文章是基於JDK1.8講解的,反編譯工具是idea自帶的反編譯工具,不同的緣由多是各位的JDK版本或反編譯工具和我不一致。用IDE的代碼聯想功能看一下:post
恩,沒錯,Object類有的方法它都有,它還多了一個length屬性(注意不是方法)。我的認爲,在Java層面,咱們徹底能夠把數組當成對象來看待,下圖咱們模擬一下數組在堆內存中的大體的樣子,每個數組都是按順序排列在堆內存中,正由於如此,咱們能夠經過數組+[下標]的方式來直接訪問數組裏的元素。idea
咱們再來看看二維數組:cdn
這裏仍是用了三種方式去聲明,仍是反編譯class文件看一下,雖然有點差異,但仍是大同小異,都給咱們加了new關鍵字(此次沒有把咱們的z數組和賦值一體化)。對象
老規矩,咱們畫一畫。blog
嘿嘿,不就是數組裏面套數組嘛,不要被二維這兩個字給嚇到了,哪有什麼二維數組,其實就是二級數組而已。上圖中只畫出了數組x,有興趣的朋友能夠自行畫一下y和z。內存
思考如下代碼的執行結果:get
注:本專欄中全部示例代碼,已上傳至公衆號:saysayJava
若是喜歡本系列文章,請爲我點贊或順手分享,您的支持是我繼續下去的動力,您也能夠在評論區留言想了解的內容,有機會本專欄會作講解,最後別忘了關注一下我。
轉載無限歡迎,但請註明「做者」和「原文地址」。轉載請在文中保留此段,感謝您對做者版權的尊重。如需商業轉載或刊登,請聯繫做者得到受權。