成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

為什么Integer比較要用equals

vspiders / 1491人閱讀

摘要:昨晚與一同事聊天,他正在找工作,讓我問他點常見面試題,然后發(fā)現他對的實現原理不是太清楚,他錯誤地以為只要不超過范圍的兩個對象就能用進行比較,但其實并不是這樣的這里先上一個例子運行結果如下下面說一下,原理實現內部有一個靜態(tài)變量池存放了一個

昨晚與一同事聊天,他正在找工作,讓我問他點常見面試題,然后發(fā)現他對Integer, Long, BigDecimal的實現原理不是太清楚,他錯誤地以為只要不超過范圍(-128 ~ 127)的兩個對象就能用==進行比較,但其實并不是這樣的;

這里先上一個例子:
public static void main(String[] args) {

            int test = 3;
            Integer intA = new Integer(3);
            Integer intB = new Integer(3);
            Integer intC = 2 + 1;
            Integer intD = 52 -49;
            Integer intE = 3;
            Integer intF = test;

            System.out.println(intA == intB);
            System.out.println(intA == intC);
            System.out.println(intC == intB);
            System.out.println(intC == intD);
            System.out.println(intC == intE);
            System.out.println(intD == intE);
            System.out.println(intD == intF);

}
運行結果如下:
false
false
false
true
true
true
true
下面說一下,原理實現
Integer 內部有一個靜態(tài)變量池 IntegerCache, 存放了一個數組Integer[], -128 ~ 127;
普通的兩個值運算都會進行自動拆箱,再進行自動裝箱,自動裝箱使用的是valueOf方法,Integer.valueOf方法在實現時如果不超過范圍(-128 ~ 127)則從 IntegerCache 中獲取緩存的Integer對象; 如果超過范圍則是new 一個新Integer對象

從IntegerCache池子中取到的對象同一個因此可以用 == 進行比較, 例如:
Integer intD = 52 -49;
Integer intE = 3;
這兩個都是從IntegerCachek中取的同一個對象,因此可以進行 == 比較;

而使用構造函數的,則不會從IntegerCache中取, 例如
Integer intA = new Integer(3);
Integer intB = new Integer(3);
他是兩個新的Integer對象,盡管value也是在-128~127之間,但并不是從靜態(tài)變量池 IntegerCache中取的,因此,此時如果用 == 判斷則為false;

總結:
兩個條件都滿足的情況下才可以用 == 判斷兩個Integer對象是否相等
1.值在-128~127之間
2.比較的兩個對象都是使用valueOf創(chuàng)建出來的,或者通過數學計算后自動裝箱(valueOf)得來的

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/74820.html

相關文章

  • Java程序設計筆記

    摘要:對象的自動清除對象回收是由垃圾回收線程負責方法可以要求系統進行垃圾回收,僅僅是建議系統沒有析構方法,但的有類似方法系統在回收時會自動調用對象的方法子類的方法可以在里面釋放系統資源,一般來說,子類的方法中應該調用父類的方法。 對象的自動清除 對象回收是由垃圾回收線程負責 System.gc()方法可以要求系統進行垃圾回收,僅僅是建議系統 java沒有析構方法,但Object的final...

    microcosm1994 評論0 收藏0
  • Object類入門這一篇就夠了!

    摘要:如果我們想要多次輸出類中的成員信息,就需要多次書寫方法每用一次就得寫而調用就簡單多了補充兩者等價輸出結果。注一般選擇重寫方法,比較對象的成員變量值是否相同,不過一般重寫都是自動生成。 第三階段 JAVA常見對象的學習 第一章 常見對象——Object類 引言: 在講解Object類之前,我們不得不簡單的提一下什么是API,先貼一組百度百科的解釋: API(Application Pro...

    alexnevsky 評論0 收藏0
  • 深入淺出了解“裝箱與拆箱”

    摘要:本章部分內容從源碼中解讀一些自動裝箱與拆箱的原理,以及會出現的一些陷阱已經性能等。例題分析我們通過幾個經典的問題,來看看大家到底理解了裝箱與拆箱的知識點沒。 showImg(https://img-blog.csdnimg.cn/20190426221838971.gif);showImg(https://img-blog.csdnimg.cn/20190426221918208.pn...

    FullStackDeveloper 評論0 收藏0
  • java的equal和==的區(qū)別(轉載的)

    摘要:更好的辦法把所有的都到緩沖池去吧最好在用到的時候就進行這個操作然后就可以用比較兩個字符串的值了二簡單數據類型和封裝類中的和為每一個簡單數據類型提供了一個封裝類,每個基本數據類型可以封裝成對象類型。 值類型是存儲在內存中的堆棧(以后簡稱棧),而引用類型的變量在棧中僅僅是存儲引用類型變量的地址,而其本身則存儲在堆中。 ==操作比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...

    cncoder 評論0 收藏0
  • 深入探究Java中equals()和==的區(qū)別是什么

    摘要:相等判斷符介紹相等判斷符用于比較基本數據類型和引用類型數據當比較基本數據類型的時候比較的是數值當比較引用類型數據時比較的是引用指針判斷基本類型是否相等首先基本數據類型指的是中的八大數據類型這八大基本數據類型有個共同的特點是它們在內存中是有具相等判斷符==介紹 ? ==相等判斷符用于比較基本數據類型和引用類型數據. 當比較基本數據類型的時候比較的是數值, 當比較引用類型數據時比較的是引用(指...

    liaorio 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<