亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

你知道在Java中Integer和int的這些區(qū)別嗎?

 更新時間:2021年06月10日 17:20:17   作者:程序屆的偽精英  
最近面試,突然被問道,說一下Integer和int的區(qū)別.額…可能平時就知道寫一些業(yè)務代碼,包括面試的一些Spring源碼等,對于這種特別基礎的反而忽略了,導致面試的時候突然被問到反而不知道怎么回答了.哎,還是乖乖再看看底層基礎,順帶記錄一下把 ,需要的朋友可以參考下

一、基本概念(重要)

  • Integer 是 int 的包裝類,int 則是 java 的一種基本數據類型;
  • Integer 變量必須實例化后才能使用,而int變量不需要;
  • Integer 實際是對象的引用,當new一個 Integer時,實際上是生成一個指針指向此對象;而 int 則是直接存儲數據值;
  • Integer的默認值是null,int的默認值是0。

二、拓展

基于以上的一些概念,這里我們拓展一下,對于Integer包裝類型與int基本數據類型之間數值相互比較的結果進行一下說明,這個也可能在面試當中會被問到。

三、new Integer()與new Integer()的比較

下面的代碼大家覺得結果是什么呢?大家可以先自己想一想然后再繼續(xù)往下看。

public static boolean comp(){
        Integer i1=new Integer(10);
        Integer i2=new Integer(10);
        return i1==i2;
    }

Integer 變量必須實例化后才能使用,也就是我們必須new Integer()之后才可以使用,而我們知道,任何對象只要是new出來的都會放在堆內存中,同時該變量存儲指向堆內存的地址,只要new出來的對象就是一個新對象,也就是說i1和i2指向的兩個不同的對象,為了證明這一點,我們通過javap -v 看一下字節(jié)碼,也能看的很清楚。

在這里插入圖片描述

因為是兩個不同的對象,所以上面的結果是false。

在這里插入圖片描述

四、Integer與new Integer()的比較

再看下面的代碼,Integer變量 和 new Integer() 變量比較

public static boolean comp1(){
        Integer i1=new Integer(10);
        Integer i2=10;
        return i1==i2;
    }

因為 Integer變量 指向的是 java 常量池中的對象,而 new Integer() 的變量指向堆中新建的對象,兩者在內存中的地址不同,兩者比較的話永遠為 false。

五、Integer與Integer的比較

public static void comp2(){
        Integer i = 100;
        Integer j = 100;
        System.out.print(i == j);

        Integer m = 128;
        Integer n = 128;
        System.out.print(m == n);
    }

這里為什么會列舉兩個呢?大家往下看。
其實Integer i = 100 在編譯時,會翻譯成為 Integer i = Integer.valueOf(100),而 java 對 Integer類型的 valueOf 的定義如下:

在這里插入圖片描述

這里的low和high分別為-128和127。

在這里插入圖片描述

閱讀源碼我們可以很清晰的看到,java對于-128到127之間的數,會進行緩存,所以 當Integer i 的值在 -128到127之間時,會將值進行緩存,下次再取Integer j(值在 -128到127之間)時,就會直接從緩存中取,就不會new了,這樣拿到的就是同一個對象。當Integer i 的值不在 -128到127之間時,每次都會重新new Integer(),那么每次都會是不同的對象。所以看到這里,大家應該知道上面的兩個不同的比較的結果是什么了把,前者為true,后者為false。

六、int 變量 與 Integer、 new Integer() 比較

int 變量 與 Integer、 new Integer() 比較時,只要兩個的值是相等,則為true,需要說明的是包裝類Integer 和 基本數據類型int 比較時,java會自動拆包裝為int ,然后進行比較,實際上就變?yōu)閮蓚€int變量的比較。

Integer i = new Integer(10); //自動拆箱為 int i=10; 此時,相當于兩個int的比較
int j = 10;
System.out.print(i == j); //true

看完了以上的,大家看看下面的比較大家能否寫出正確的結果。

public static void comp3(){
        int i = 128;
        Integer i2 = 128;
        Integer i3 = new Integer(128);

        System.out.println("i == i2 = " + (i == i2)); // Integer會自動拆箱為int,所以為true
        System.out.println("i == i3 = " + (i == i3)); // true,理由同上

        Integer i4 = 127;// 編譯時被翻譯成:Integer i4 = Integer.valueOf(127);
        Integer i5 = 127;
        System.out.println("i4 == i5 = " + (i4 == i5));// true

        Integer i6 = 128;
        Integer i7 = 128;
        System.out.println("i6 == i7 = " + (i6 == i7));// false

        Integer i8 = new Integer(127);
        System.out.println("i5 == i8 = " + (i5 == i8)); // false

        Integer i9 = new Integer(128);
        Integer i10 = new Integer(128);
        System.out.println("i9 == i10 = " + (i9 == i10)); // false
    }
public static void comp4(){
        Integer a = new Integer(127), b = new Integer(128);

        int c = 127, d = 128, dd = 128;
        Integer e = 127, ee = 127, f = 128, ff = 128;

        System.out.println(a == b); // false 因為a,b都是new出來的對象,地址不同所以為false
        System.out.println(a == c); // true a會自動拆箱為int類型
        System.out.println(a == e); // false 指向的地址不同a是new出來的

        System.out.println(e == c); // true e會自動拆箱為int類型
        System.out.println(e == ee);// true Integer對 處于-128到127范圍之間,指向了同一片地址區(qū)域

        System.out.println(b == f); // false 指向的地址不同b是new出來的
        System.out.println(f == d); // true f自動拆箱為int類型

        System.out.println(f == ff); /*
         * false 指向的不是同一片地址區(qū)域。
         * 在Integer類型中,-128到127存放的是同一片區(qū)域地址,
         * 之外的數是另外開辟空間來進行 存儲的
         */
        System.out.println(d == dd); // true 不解釋
    }
public static void comp5(){
        Integer i01 = 59;
        int i02 = 59;
        Integer i03 =Integer.valueOf(59);
        Integer i04 = new Integer(59);
        System.out.println(i01 == i02);//true
        System.out.println(i01 == i03);//true
        System.out.println(i03 == i04);//false
        System.out.println(i02 == i04);//true
    }
public static void comp6(){
        Integer i01 = 128;
        int i02 = 128;
        Integer i03 = Integer.valueOf(128);
        Integer i04 = new Integer(128);
        System.out.println(i01 == i02);//true
        System.out.println(i01 == i03);//false
        System.out.println(i03 == i04);//false
        System.out.println(i02 == i04);//true
    }

到此這篇關于你知道在Java中Integer和int的這些區(qū)別嗎?的文章就介紹到這了,更多相關Integer和int的區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何使用HttpClient發(fā)送java對象到服務器

    如何使用HttpClient發(fā)送java對象到服務器

    這篇文章主要介紹了如何使用HttpClient發(fā)送java對象到服務器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • springBoot 項目排除數據庫啟動方式

    springBoot 項目排除數據庫啟動方式

    這篇文章主要介紹了springBoot 項目排除數據庫啟動方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot異步實現的8種方式

    SpringBoot異步實現的8種方式

    異步執(zhí)行對于開發(fā)者來說并不陌生,在實際的開發(fā)過程中,很多場景多會使用到異步,本文主要介紹了SpringBoot異步實現的8種方式,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Java 設計模式之責任鏈模式及異步責任鏈詳解

    Java 設計模式之責任鏈模式及異步責任鏈詳解

    顧名思義,責任鏈模式(Chain of Responsibility Pattern)為請求創(chuàng)建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發(fā)送者和接收者進行解耦。這種類型的設計模式屬于行為型模式
    2021-11-11
  • 深入解析Java設計模式編程中觀察者模式的運用

    深入解析Java設計模式編程中觀察者模式的運用

    這篇文章主要介紹了Java設計模式編程中觀察者模式的運用,觀察者模式主要是為了將對象進行與被觀察者一樣的實現,需要的朋友可以參考下
    2016-02-02
  • Java?導出Excel增加下拉框選項

    Java?導出Excel增加下拉框選項

    這篇文章主要介紹了Java?導出Excel增加下拉框選項,excel對于下拉框較多選項的,需要使用隱藏工作簿來解決,使用函數取值來做選項,下文具體的操作詳情,需要的小伙伴可以參考一下
    2022-04-04
  • Java中LocalCache本地緩存實現代碼

    Java中LocalCache本地緩存實現代碼

    本篇文章主要介紹了Java中LocalCache本地緩存實現代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java中SpringSecurity密碼錯誤5次鎖定用戶的實現方法

    Java中SpringSecurity密碼錯誤5次鎖定用戶的實現方法

    這篇文章主要介紹了Java中SpringSecurity密碼錯誤5次鎖定用戶的實現方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • SpringBoot使用JSP作為視圖模板的方法

    SpringBoot使用JSP作為視圖模板的方法

    這篇文章主要介紹了SpringBoot使用JSP作為視圖模板的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • java中棧和隊列的實現和API的用法(詳解)

    java中棧和隊列的實現和API的用法(詳解)

    下面小編就為大家?guī)硪黄猨ava中棧和隊列的實現和API的用法(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論