在說說Java里有equals(上) - Java那些事兒這篇文章里泊脐,文末我們提到了String底層是char數(shù)組來實(shí)現(xiàn)的,好多人當(dāng)年上學(xué)時(shí)被二維數(shù)組烁峭,三維數(shù)組嚇哭了吧容客。我們今天來講講數(shù)組,數(shù)組非常的重要约郁,很多常用類缩挑,比如String等底層都是用數(shù)組來實(shí)現(xiàn)的,后續(xù)我們會一一講到鬓梅,多少人很久沒用數(shù)組了供置?是否都在用ArrayList呀?這兒先賣個(gè)關(guān)子绽快,ArrayList底層也是數(shù)組實(shí)現(xiàn)的芥丧。
所謂數(shù)組,是相同數(shù)據(jù)類型的元素按一定順序排列的集合》话眨現(xiàn)在我們來看一看數(shù)組在內(nèi)存中的樣子续担,話不多說,上代碼:
這是一段教科書級別的代碼艘绍,讓我想起了中學(xué)時(shí)候?qū)W過的文章赤拒,孔乙己問:茴香豆的茴字有幾種寫法?先編譯一下,我們打開編譯好的class文件挎挖,反編譯一下看看:
三種數(shù)組的聲明方式編譯后这敬,最后創(chuàng)建的方式都是一樣的,都給我們加了new關(guān)鍵字蕉朵,順手還把charArr3的聲明與賦值一體化了崔涂,編譯器你管得也太多了吧。評論區(qū)里有人說反編譯后和我反編譯后的代碼不一樣始衅,本專欄所有文章是基于JDK1.8講解的冷蚂,反編譯工具是idea自帶的反編譯工具,不一樣的原因可能是各位的JDK版本或反編譯工具和我不一致汛闸。用IDE的代碼聯(lián)想功能看一下:
恩蝙茶,沒錯(cuò),Object類有的方法它都有诸老,它還多了一個(gè)length屬性(注意不是方法)隆夯。個(gè)人認(rèn)為,在Java層面别伏,我們完全可以把數(shù)組當(dāng)成對象來看待蹄衷,下圖我們模擬一下數(shù)組在堆內(nèi)存中的大致的樣子,每一個(gè)數(shù)組都是按順序排列在堆內(nèi)存中厘肮,正因?yàn)槿绱死⒖冢覀兛梢酝ㄟ^數(shù)組+[下標(biāo)]的方式來直接訪問數(shù)組里的元素。
我們再來看看二維數(shù)組:
這里還是用了三種方式去聲明类茂,還是反編譯class文件看一下耍属,雖然有點(diǎn)差別,但還是大同小異大咱,都給我們加了new關(guān)鍵字(這次沒有把我們的z數(shù)組和賦值一體化)恬涧。
老規(guī)矩,我們畫一畫碴巾。
嘿嘿溯捆,不就是數(shù)組里面套數(shù)組嘛,不要被二維這兩個(gè)字給嚇到了厦瓢,哪有什么二維數(shù)組提揍,其實(shí)就是二級數(shù)組而已。上圖中只畫出了數(shù)組x煮仇,有興趣的朋友可以自行畫一下y和z劳跃。
思考以下代碼的執(zhí)行結(jié)果:
如果喜歡本系列文章,請為我點(diǎn)贊或順手分享浙垫,您的支持是我繼續(xù)下去的動力刨仑,您也可以在評論區(qū)留言想了解的內(nèi)容郑诺,有機(jī)會本專欄會做講解,最后別忘了關(guān)注一下我杉武。
轉(zhuǎn)載無限歡迎辙诞,但請注明「作者」和「原文地址」。轉(zhuǎn)載請?jiān)谖闹斜A舸硕吻岜В兄x您對作者版權(quán)的尊重飞涂。如需商業(yè)轉(zhuǎn)載或刊登,請聯(lián)系作者獲得授權(quán)祈搜。