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

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

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

代碼實例如下

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,會自動裝箱變?yōu)镮nteger i = Integer.valueOf(10);Integer i 會自動拆箱為 i.intValue()。

 ?、佟⒌谝粋€打印結(jié)果為 true

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

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

  

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

  ②、第二個打印結(jié)果為 false

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

 ?、邸⒌谌齻€打印結(jié)果為 true

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

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

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

 ?、荨⒌谖鍌€打印結(jié)果為 false

  因為這個雖然值為10,但是我們都是通過 new 關(guān)鍵字來創(chuàng)建的兩個對象,是不存在緩存的概念的。兩個用new關(guān)鍵字創(chuàng)建的對象用 == 進行比較,結(jié)果當(dāng)然為 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));

  反編譯結(jié)果:

  

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

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

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

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

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

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

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

相關(guān)文章

  • 如何解決Druid線程池Cause:java.sql.SQLRecoverableException:IO錯誤:Socket read timed out的問題

    如何解決Druid線程池Cause:java.sql.SQLRecoverableException:IO錯誤:Sock

    這篇文章主要介紹了解決Druid線程池Cause:java.sql.SQLRecoverableException:IO錯誤:Socket read timed out的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java對象池pool2分析PooledObjectFactory過程

    Java對象池pool2分析PooledObjectFactory過程

    文章介紹了Java中對象池化技術(shù)的背景,以Apache的Pool2庫為例,詳細講解了GenericObjectPool的構(gòu)造函數(shù)參數(shù)和PooledObjectFactory接口的實現(xiàn),通過商場里的共享充電寶的比喻,說明了池化思維的應(yīng)用
    2025-02-02
  • SpringBoot?Application核心注解詳解

    SpringBoot?Application核心注解詳解

    進入到@SpringBootApplication的源碼,可以看到里面組合了三個我們感興趣的注解@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration,我們一一分析這三個注解
    2022-10-10
  • Java實現(xiàn)4種微信搶紅包算法(小結(jié))

    Java實現(xiàn)4種微信搶紅包算法(小結(jié))

    微信紅包是大家經(jīng)常使用的,到現(xiàn)在為止仍然有很多紅包開發(fā)的需求,實現(xiàn)搶紅包算法也是面試??碱},本文就詳細的來介紹一下如何實現(xiàn),感興趣的可以了解一下
    2021-12-12
  • feign調(diào)用中文參數(shù)被encode編譯的問題

    feign調(diào)用中文參數(shù)被encode編譯的問題

    這篇文章主要介紹了feign調(diào)用中文參數(shù)被encode編譯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java SSH 秘鑰連接mysql數(shù)據(jù)庫的方法

    Java SSH 秘鑰連接mysql數(shù)據(jù)庫的方法

    這篇文章主要介紹了Java SSH 秘鑰連接mysql數(shù)據(jù)庫的方法,包括引入依賴的代碼和出現(xiàn)異常報錯問題,需要的朋友可以參考下
    2021-06-06
  • SpringBoot接受參數(shù)相關(guān)注解方式

    SpringBoot接受參數(shù)相關(guān)注解方式

    SpringBoot接受參數(shù)的注解包括@PathVariable、@RequestHeader、@RequestParameter、@CookieValue、@RequestBody、@RequestAttribute和@SessionAttribute等,每個注解都有詳細的使用方法和示例代碼
    2024-12-12
  • 淺析Java.IO輸入輸出流 過濾流 buffer流和data流

    淺析Java.IO輸入輸出流 過濾流 buffer流和data流

    這篇文章主要介紹了Java.IO輸入輸出流 過濾流 buffer流和data流的相關(guān)資料,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • Win10系統(tǒng)下配置Java環(huán)境變量

    Win10系統(tǒng)下配置Java環(huán)境變量

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Win10系統(tǒng)下配置Java環(huán)境變量展開,文中有非常詳細的介紹及圖文示例,需要的朋友可以參考下
    2021-06-06
  • 使用Lombok子類繼承父類,父類屬性不生效問題及解決

    使用Lombok子類繼承父類,父類屬性不生效問題及解決

    在使用Lombok庫時,若子類繼承父類,父類的屬性可能不會自動生效,為解決此問題,可通過在父類上添加@Getter和@Setter注解,或使用@SuperBuilder注解來確保父類屬性在子類中有效,同時,需注意確保Lombok版本一致且正確配置了相關(guān)插件
    2024-10-10

最新評論