欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過實(shí)例了解Java Integer類和int的區(qū)別

 更新時(shí)間:2020年03月23日 09:20:56   作者:kakaisgood  
這篇文章主要介紹了通過實(shí)例了解Java Integer類和int的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

代碼實(shí)例如下

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);
}

  打印結(jié)果為:

  

  首先,直接聲明Integer i = 10,會(huì)自動(dòng)裝箱變?yōu)镮nteger i = Integer.valueOf(10);Integer i 會(huì)自動(dòng)拆箱為 i.intValue()。

 ?、?、第一個(gè)打印結(jié)果為 true

  對(duì)于 i == j ,我們知道這是兩個(gè)Integer類,他們比較應(yīng)該是用equals,這里用==比較的是地址,那么結(jié)果肯定為false,但是實(shí)際上結(jié)果為true,這是為什么?

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

  

  分析源碼我們可以知道在 i >= -128 并且 i <= 127 的時(shí)候,第一次聲明會(huì)將 i 的值放入緩存中,第二次直接取緩存里面的數(shù)據(jù),而不是重新創(chuàng)建一個(gè)Ingeter 對(duì)象。那么第一個(gè)打印結(jié)果因?yàn)?i = 10 在緩存表示范圍內(nèi),所以為 true。

 ?、?、第二個(gè)打印結(jié)果為 false

  從上面的分析我們知道,128是不在-128到127之間的,所以第一次創(chuàng)建對(duì)象的時(shí)候沒有緩存,第二次創(chuàng)建了一個(gè)新的Integer對(duì)象。故打印結(jié)果為false

  ③、第三個(gè)打印結(jié)果為 true

  Integer 的自動(dòng)拆箱功能,也就是比較兩個(gè)基本數(shù)據(jù)類型,結(jié)果當(dāng)然為true

 ?、?、第四個(gè)打印結(jié)果為 true

  解釋和第三個(gè)一樣。int和integer(無論new否)比,都為true,因?yàn)闀?huì)把Integer自動(dòng)拆箱為int再去比較。

  ⑤、第五個(gè)打印結(jié)果為 false

  因?yàn)檫@個(gè)雖然值為10,但是我們都是通過 new 關(guān)鍵字來創(chuàng)建的兩個(gè)對(duì)象,是不存在緩存的概念的。兩個(gè)用new關(guān)鍵字創(chuàng)建的對(duì)象用 == 進(jìn)行比較,結(jié)果當(dāng)然為 false。

5、測(cè)試

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));

  反編譯結(jié)果:

  

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

  第三個(gè)由于 a+b包含了算術(shù)運(yùn)算,因此會(huì)觸發(fā)自動(dòng)拆箱過程(會(huì)調(diào)用intValue方法),==比較符又將左邊的自動(dòng)拆箱,因此它們比較的是數(shù)值是否相等。

  第四個(gè)對(duì)于c.equals(a+b)會(huì)先觸發(fā)自動(dòng)拆箱過程,再觸發(fā)自動(dòng)裝箱過程,也就是說a+b,會(huì)先各自調(diào)用intValue方法,得到了加法運(yùn)算后的數(shù)值之后,便調(diào)用Integer.valueOf方法,再進(jìn)行equals比較。

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

  第六個(gè)對(duì)于 g.equals(a+b),同理a+b會(huì)先自動(dòng)拆箱,然后將結(jié)果自動(dòng)裝箱,需要說明的是equals 運(yùn)算符不會(huì)進(jìn)行類型轉(zhuǎn)換。所以是Long.equals(Integer),結(jié)果當(dāng)然是false

  第七個(gè)對(duì)于g.equals(a+h),運(yùn)算符+會(huì)進(jìn)行類型轉(zhuǎn)換,a+h各自拆箱之后是int+long,結(jié)果是long,然后long進(jìn)行自動(dòng)裝箱為L(zhǎng)ong,兩個(gè)Long進(jìn)行equals判斷。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot整合spring-retry的實(shí)現(xiàn)示例

    springboot整合spring-retry的實(shí)現(xiàn)示例

    本文將結(jié)合實(shí)例代碼,介紹springboot整合spring-retry的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 解決mapper.xml中resultType映射類型的問題

    解決mapper.xml中resultType映射類型的問題

    這篇文章主要介紹了解決mapper.xml中resultType映射類型的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • RestTemplate的DELETE及PUT等請(qǐng)求方法使用精講

    RestTemplate的DELETE及PUT等請(qǐng)求方法使用精講

    這篇文章主要為大家介紹了RestTemplate的DELETE及PUT等請(qǐng)求方法的使用精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • JavaFX之TableView的使用詳解

    JavaFX之TableView的使用詳解

    這篇文章主要介紹了JavaFX之TableView的使用,有需要的朋友可以參考一下
    2013-12-12
  • eclipse 中的javac命令與java命令

    eclipse 中的javac命令與java命令

    這篇文章主要介紹了eclipse javac命令與java命令的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • java圖形界面之加法計(jì)算器

    java圖形界面之加法計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了java圖形界面之加法計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 基于mybatis like %%的問題

    基于mybatis like %%的問題

    這篇文章主要介紹了mybatis like %%的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java 中如何使用 JavaFx 庫標(biāo)注文本顏色

    Java 中如何使用 JavaFx 庫標(biāo)注文本顏色

    這篇文章主要介紹了在 Java 中用 JavaFx 庫標(biāo)注文本顏色,在本文中,我們將了解如何更改標(biāo)簽的文本顏色,并且我們還將看到一個(gè)必要的示例和適當(dāng)?shù)慕忉專员愀菀桌斫庠撝黝},需要的朋友可以參考下
    2023-05-05
  • spring boot2.0總結(jié)介紹

    spring boot2.0總結(jié)介紹

    今天小編就為大家分享一篇關(guān)于spring boot2.0總結(jié)介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Springboot手動(dòng)連接庫并獲取指定表結(jié)構(gòu)的示例代碼

    Springboot手動(dòng)連接庫并獲取指定表結(jié)構(gòu)的示例代碼

    這篇文章主要介紹了Springboot手動(dòng)連接庫并獲取指定表結(jié)構(gòu)的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論