亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

通過實例了解Java Integer類和int的區別

瀏覽:33日期:2022-09-04 08:36:38

代碼實例如下

public static void main(String[] args) { Integer i = 10; Integer j = 10; System.out.println(i == j); Integer a = 128; Integer b = 128; System.out.println(a == b); int k = 10; System.out.println(k == i); int kk = 128; System.out.println(kk == a); Integer m = new Integer(10); Integer n = new Integer(10); System.out.println(m == n);}

我們使用反編譯工具Jad,得到的代碼如下:

public static void main(String args[]){ Integer i = Integer.valueOf(10); Integer j = Integer.valueOf(10); System.out.println(i == j); Integer a = Integer.valueOf(128); Integer b = Integer.valueOf(128); System.out.println(a == b); int k = 10; System.out.println(k == i.intValue()); int kk = 128; System.out.println(kk == a.intValue()); Integer m = new Integer(10); Integer n = new Integer(10); System.out.println(m == n);}

打印結果為:

通過實例了解Java Integer類和int的區別

首先,直接聲明Integer i = 10,會自動裝箱變為Integer i = Integer.valueOf(10);Integer i 會自動拆箱為 i.intValue()。

①、第一個打印結果為 true

對于 i == j ,我們知道這是兩個Integer類,他們比較應該是用equals,這里用==比較的是地址,那么結果肯定為false,但是實際上結果為true,這是為什么?

我們進入到Integer 類的valueOf()方法:

通過實例了解Java Integer類和int的區別

分析源碼我們可以知道在 i >= -128 并且 i <= 127 的時候,第一次聲明會將 i 的值放入緩存中,第二次直接取緩存里面的數據,而不是重新創建一個Ingeter 對象。那么第一個打印結果因為 i = 10 在緩存表示范圍內,所以為 true。

②、第二個打印結果為 false

從上面的分析我們知道,128是不在-128到127之間的,所以第一次創建對象的時候沒有緩存,第二次創建了一個新的Integer對象。故打印結果為false

③、第三個打印結果為 true

Integer 的自動拆箱功能,也就是比較兩個基本數據類型,結果當然為true

④、第四個打印結果為 true

解釋和第三個一樣。int和integer(無論new否)比,都為true,因為會把Integer自動拆箱為int再去比較。

⑤、第五個打印結果為 false

因為這個雖然值為10,但是我們都是通過 new 關鍵字來創建的兩個對象,是不存在緩存的概念的。兩個用new關鍵字創建的對象用 == 進行比較,結果當然為 false。

5、測試

Integer a = 1;Integer b = 2;Integer c = 3;Integer d = 3;Integer e = 321;Integer f = 321;Long g = 3L;Long h = 2L;System.out.println(c == d);System.out.println(e == f);System.out.println(c == (a + b));System.out.println(c.equals((a+b)));System.out.println(g == (a+b));System.out.println(g.equals(a+b));System.out.println(g.equals(a+h));

反編譯結果:

通過實例了解Java Integer類和int的區別

分析:第一個和第二個結果沒什么疑問,Integer類在-128到127的緩存問題;

第三個由于 a+b包含了算術運算,因此會觸發自動拆箱過程(會調用intValue方法),==比較符又將左邊的自動拆箱,因此它們比較的是數值是否相等。

第四個對于c.equals(a+b)會先觸發自動拆箱過程,再觸發自動裝箱過程,也就是說a+b,會先各自調用intValue方法,得到了加法運算后的數值之后,便調用Integer.valueOf方法,再進行equals比較。

第五個對于 g == (a+b),首先計算 a+b,也是先調用各自的intValue方法,得到數值之后,由于前面的g是Long類型的,也會自動拆箱為long,==運算符能將隱含的將小范圍的數據類型轉換為大范圍的數據類型,也就是int會被轉換成long類型,兩個long類型的數值進行比較。

第六個對于 g.equals(a+b),同理a+b會先自動拆箱,然后將結果自動裝箱,需要說明的是equals 運算符不會進行類型轉換。所以是Long.equals(Integer),結果當然是false

第七個對于g.equals(a+h),運算符+會進行類型轉換,a+h各自拆箱之后是int+long,結果是long,然后long進行自動裝箱為Long,兩個Long進行equals判斷。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 大伊香蕉在线精品不卡视频 | 国产aav| 中国一级做a爰片久久毛片 中国一级做a爱片免费 | xxx本日| 日韩亚洲在线观看 | 亚洲精品你懂的 | 亚洲国产免费 | 国产精品视频一区二区三区不卡 | 亚洲欧美久久精品1区2区 | 久九九久福利精品视频视频 | 欧美成人免费全部观看天天性色 | 91精品视频播放 | 日韩欧美一区二区三区免费看 | 亚洲精品一区二区三区在 | 视频在线一区二区 | 午夜一级毛片免费视频 | 4388x17亚洲最大成人网 | 久久综合久久久久 | 屁屁影院一区二区三区 | 成人在线观看视频网站 | 久久精品免看国产 | 亚洲香蕉久久综合网 | 丁香婷婷色综合亚洲小说 | 欧美日韩亚洲视频 | 中文字幕乱码一区三区免费 | 麻豆国产入口在线观看免费 | 色综合色综合色综合色综合 | 国产一二区 | 欧美日韩免费看 | 国外精品视频在线观看免费 | 国产欧美日韩综合一区二区三区 | 日韩在线不卡一区在线观看 | 亚洲一级在线 | 国产成人毛片视频不卡在线 | 九九亚洲 | 手机能看的黄色网址 | 黄色片一区 | 91福利精品老师国产自产在线 | 一区二区三区 日韩 | 国产精品国产高清国产专区 | 欧美一级大黄特黄毛片视频 |