decimal 类型数据怎么引用_Java基本数据类型和引用类型
前面的文章有時候會留一些思考題,主要是想讓大家多想想文章的內(nèi)容,所以沒留答案,評論區(qū)回復(fù)也是五花八門。寫這篇文章是想再幫大家鞏固一下之前的內(nèi)容,子曾經(jīng)說過:“溫故而知新,可以上王者”。Java中一共有四類八種基本數(shù)據(jù)類型,看下表:
除掉這四類八種基本類型,其它的都是對象,也就是引用類型,包括數(shù)組。
來看一段示例代碼:
一個Person類,提供了一個構(gòu)造方法,一些get/set方法:
下面是測試的main方法:
先看第一句代碼:
方法體里聲明的基本數(shù)據(jù)類型在棧內(nèi)存里,我們畫一下
繼續(xù)執(zhí)行以下代碼
對于基本數(shù)據(jù)類型來說,賦值(=號)就相當(dāng)于拷貝了一份值,把int1的值100,拷貝給int2,繼續(xù)畫圖
int1=500,直接修改int1的值為500,表現(xiàn)如下圖
分別打印int1,int2的值,相信沒有人會答錯,分別是500,100。
再來看數(shù)組的初始化
先初始化arr1,當(dāng)執(zhí)行到new這個關(guān)鍵字,會在堆內(nèi)存分配內(nèi)存空間,并把該內(nèi)存空間的地址賦值給arr1
繼續(xù)執(zhí)行以下代碼
這時候執(zhí)行如下代碼
雖然只是修改arr1數(shù)組下標(biāo)位置為3的值
但由于數(shù)組arr1和數(shù)組arr2指向同一塊堆內(nèi)存,打印arr1[3]和arr2[3]的值,都是8。你答對了嗎?
再來看對象的初始化
當(dāng)看到這個new,這貨肯定在堆內(nèi)存里開辟了一塊內(nèi)存空間,Person里有一個叫name的String對象,String這個對象有點特殊,雖然沒有new這個關(guān)鍵字,但還是在堆內(nèi)存中開辟了一塊空間,在 String是一個很普通的類 一文中已經(jīng)講解過了,這里就不再細(xì)講了,String底層是數(shù)組實現(xiàn)的,數(shù)組也是引用類型,age為基本數(shù)據(jù)類型,表現(xiàn)如下圖
上圖中大框里的內(nèi)容就是整個Person對象在堆內(nèi)存中的體現(xiàn),繼續(xù)執(zhí)行以下代碼
沒有new關(guān)鍵字,per2不會在堆內(nèi)存中新開辟空間,和數(shù)組一樣,也是把per1的內(nèi)存地址直接賦值給了per2
當(dāng)我們修改per1的屬性的時候
如下圖兩個紅框里的內(nèi)容,給對象(數(shù)組也是對象)賦值其實就是相當(dāng)于引用重新指向一塊堆內(nèi)存,基本數(shù)據(jù)類型是直接修改值,表現(xiàn)如下圖
所以,不管打印per1還是per2的name、age,打印出來的結(jié)果都是“李四”、35,這個你也答對了嗎?最后,我們來驗證一下,結(jié)果是不是和文中說的一致。
結(jié)果完全一致,回過頭來看看Java里的“==”比較符,結(jié)果就不難理解了,代碼如下
結(jié)果分別是false,true,true,當(dāng)==兩邊是基本數(shù)據(jù)類型時,==于比較的是兩邊的兩個值是否相等,當(dāng)==兩邊是引用類型時比較的是兩個內(nèi)存地址,也可以看成是看這兩個引用是否指向堆內(nèi)存里的同一塊地址,如下圖
新手在學(xué)習(xí)Java時,在引用類型上可能經(jīng)常容易犯錯誤,如本文中所講的arr1,arr2,很多人在寫代碼的時候是想拷貝一份值來用,卻不知道在修改arr1的時候,arr2的值也變了。
本篇內(nèi)容就講解到這兒,畫圖不易,希望大家以后多想想變量在內(nèi)存中的樣子,學(xué)習(xí)起來可以事半功倍。四類八種基本數(shù)據(jù)類型,本文只列舉了int類型,其它的7中基本類型和int的表現(xiàn)形式一致,這里就不一一舉例了。
最后,說一下前面的文章留的文末思考,首先是 讓人疑惑的Java代碼 一文中的文末思考
很簡單是false
兩個對象都是新new出來的,開辟了兩塊內(nèi)存空間,i7和i8的引用不是指向堆內(nèi)存里的同一塊地址,因此打印出來是false。
至于 Java中的數(shù)組 一文中的文末思考
相信認(rèn)真看過本文的朋友都知道打印出來是多少了,還不清楚的,建議重新閱讀本文,直到弄明白為止。
注:char數(shù)組的打印有點特殊,int數(shù)組打印是打印出來一個地址,而char數(shù)組是打印數(shù)組里的內(nèi)容。
如果喜歡本系列文章,請為我點贊或順手分享,您的支持是我繼續(xù)下去的動力,您也可以在評論區(qū)留言想了解的內(nèi)容,有機會本專欄會做講解,最后別忘了關(guān)注一下我
上一篇: String是一個很普通的類
下一篇: Java自動裝箱/拆箱
總結(jié)
以上是生活随笔為你收集整理的decimal 类型数据怎么引用_Java基本数据类型和引用类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存版本号揭秘:A级高性能抢眼,B、C、
- 下一篇: 使命召唤9占内存:细腻画面、震撼剧情、极