最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、基本概念(重要)

  • Integer 是 int 的包裝類,int 則是 java 的一種基本數(shù)據(jù)類型;
  • Integer 變量必須實(shí)例化后才能使用,而int變量不需要;
  • Integer 實(shí)際是對(duì)象的引用,當(dāng)new一個(gè) Integer時(shí),實(shí)際上是生成一個(gè)指針指向此對(duì)象;而 int 則是直接存儲(chǔ)數(shù)據(jù)值;
  • Integer的默認(rèn)值是null,int的默認(rèn)值是0。

二、拓展

基于以上的一些概念,這里我們拓展一下,對(duì)于Integer包裝類型與int基本數(shù)據(jù)類型之間數(shù)值相互比較的結(jié)果進(jìn)行一下說(shuō)明,這個(gè)也可能在面試當(dāng)中會(huì)被問(wèn)到。

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

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

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

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

在這里插入圖片描述

因?yàn)槭莾蓚€(gè)不同的對(duì)象,所以上面的結(jié)果是false。

在這里插入圖片描述

四、Integer與new Integer()的比較

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

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

因?yàn)?Integer變量 指向的是 java 常量池中的對(duì)象,而 new Integer() 的變量指向堆中新建的對(duì)象,兩者在內(nèi)存中的地址不同,兩者比較的話永遠(yuǎn)為 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);
    }

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

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

看完了以上的,大家看看下面的比較大家能否寫(xiě)出正確的結(jié)果。

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

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

        Integer i4 = 127;// 編譯時(shí)被翻譯成: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 因?yàn)閍,b都是new出來(lái)的對(duì)象,地址不同所以為false
        System.out.println(a == c); // true a會(huì)自動(dòng)拆箱為int類型
        System.out.println(a == e); // false 指向的地址不同a是new出來(lái)的

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

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

        System.out.println(f == ff); /*
         * false 指向的不是同一片地址區(qū)域。
         * 在Integer類型中,-128到127存放的是同一片區(qū)域地址,
         * 之外的數(shù)是另外開(kāi)辟空間來(lái)進(jìn)行 存儲(chǔ)的
         */
        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
    }

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

相關(guān)文章

  • postman中實(shí)現(xiàn)傳遞@RequestBody參數(shù)

    postman中實(shí)現(xiàn)傳遞@RequestBody參數(shù)

    這篇文章主要介紹了postman中實(shí)現(xiàn)傳遞@RequestBody參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Hibernate+JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法詳解

    Hibernate+JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法詳解

    這篇文章主要介紹了Hibernate+JDBC實(shí)現(xiàn)批量插入、更新及刪除的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Hibernate與JDBC針對(duì)數(shù)據(jù)庫(kù)的批量操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • SpringBoot中@Transiactional注解沒(méi)有效果的解決

    SpringBoot中@Transiactional注解沒(méi)有效果的解決

    這篇文章主要介紹了SpringBoot中@Transiactional注解沒(méi)有效果的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SWT JFace 小制作 文本閱讀器

    SWT JFace 小制作 文本閱讀器

    SWT JFace 小制作 文本閱讀器
    2009-06-06
  • SpringBoot?使用定時(shí)任務(wù)(SpringTask)的詳細(xì)步驟

    SpringBoot?使用定時(shí)任務(wù)(SpringTask)的詳細(xì)步驟

    Cron?表達(dá)式非常靈活,可以滿足各種定時(shí)任務(wù)的需求,但需要注意的是,Cron?表達(dá)式只能表示固定的時(shí)間點(diǎn),無(wú)法處理復(fù)雜的時(shí)間邏輯,本文給大家介紹SpringBoot?使用定時(shí)任務(wù)(SpringTask)的詳細(xì)步驟,感興趣的朋友一起看看吧
    2024-02-02
  • SpringBoot和Tomcat的關(guān)系解讀

    SpringBoot和Tomcat的關(guān)系解讀

    這篇文章主要介紹了SpringBoot和Tomcat的關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • IDEA遠(yuǎn)程部署調(diào)試Java應(yīng)用程序的詳細(xì)流程

    IDEA遠(yuǎn)程部署調(diào)試Java應(yīng)用程序的詳細(xì)流程

    這篇文章主要介紹了IDEA遠(yuǎn)程部署調(diào)試Java應(yīng)用程序,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • Java兩個(gè)List<T> 求交集,差集,并集,去重后的并集

    Java兩個(gè)List<T> 求交集,差集,并集,去重后的并集

    本文主要介紹了Java兩個(gè)List<T> 求交集,差集,并集,去重后的并集,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 一文讀懂Spring Bean的生命周期

    一文讀懂Spring Bean的生命周期

    今天我們來(lái)說(shuō)一說(shuō) Spring Bean 的生命周期,小伙伴們應(yīng)該在面試中經(jīng)常遇到,這是正?,F(xiàn)象,本文讓更多的小伙伴們可以輕松的讀懂 Spring Bean 的生命周期
    2023-03-03
  • SpringBoot項(xiàng)目的兩種發(fā)布方式

    SpringBoot項(xiàng)目的兩種發(fā)布方式

    本文主要介紹了SpringBoot項(xiàng)目的兩種發(fā)布方式,包含jar包發(fā)布和war包發(fā)布,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07

最新評(píng)論

弥渡县| 巴南区| 铁岭县| 油尖旺区| 息烽县| 新野县| 奉节县| 苗栗市| 万载县| 蓝田县| 苗栗市| 招远市| 山东省| 博罗县| 绥宁县| 巴东县| 邵阳县| 石门县| 荣成市| 南京市| 托克托县| 霍邱县| 开化县| 方山县| 石楼县| 精河县| 万宁市| 吉安县| 景宁| 江达县| 东安县| 湖州市| 乌恰县| 尉氏县| 搜索| 鄂州市| 井陉县| 天门市| 区。| 绥芬河市| 金坛市|