AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Java判斷Integer相等-應該這樣用

來源: 責編: 時間:2023-09-22 20:10:28 269觀看
導讀先看下這段代碼,然后猜下結果:Integer i1 = 50;Integer i2 = 50;Integer i3 = 128;Integer i4 = 128;System.out.println(i1 == i2);System.out.println(i3 == i4);針對以上結果,估計不少Java小伙伴會算錯!如果在項目中使

先看下這段代碼,然后猜下結果:N0d28資訊網——每日最新資訊28at.com

Integer i1 = 50;Integer i2 = 50;Integer i3 = 128;Integer i4 = 128;System.out.println(i1 == i2);System.out.println(i3 == i4);

針對以上結果,估計不少Java小伙伴會算錯!N0d28資訊網——每日最新資訊28at.com

如果在項目中使用==對Integer進行比較,很容易掉坑。N0d28資訊網——每日最新資訊28at.com

N0d28資訊網——每日最新資訊28at.com

為什么發生以上結果?

1.執行Integer i1 = 50的時候,底層會進行自動裝箱:N0d28資訊網——每日最新資訊28at.com

Integer i1 = 50;//底層自動裝箱Integer i = Integer.valueOf(50);

2.再看==操作N0d28資訊網——每日最新資訊28at.com

==是判斷兩個對象在內存中的地址是否相等。所以System.out.println(i1 == i2); 和 System.out.println(i3 == i4); 是判斷他們在內存中的地址是否相等。N0d28資訊網——每日最新資訊28at.com

根據猜測應該全是false或者全是true呀,怎么會不同呢?N0d28資訊網——每日最新資訊28at.com

3.源碼底下無秘密N0d28資訊網——每日最新資訊28at.com

通過翻看jdk源碼,你會發現:如果要創建的 Integer 對象的值在 -128 到 127 之間,會從 IntegerCache 類中直接返回,否則才調用 new Integer方法創建。所以只要數值是正的Integer > 127,則會new一個新的對象。數值 <= 127時會直接從Cache中獲取到同一個對象。N0d28資訊網——每日最新資訊28at.com

public static Integer valueOf(int i) {    if (i >= IntegerCache.low && i <= IntegerCache.high)        return IntegerCache.cache[i + (-IntegerCache.low)];    return new Integer(i);}
private static class IntegerCache {    static final int low = -128;    static final int high;    static final Integer cache[];    static {        // high value may be configured by property        int h = 127;        String integerCacheHighPropValue =            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");        if (integerCacheHighPropValue != null) {            try {                int i = parseInt(integerCacheHighPropValue);                i = Math.max(i, 127);                // Maximum array size is Integer.MAX_VALUE                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);            } catch( NumberFormatException nfe) {                // If the property cannot be parsed into an int, ignore it.            }        }        high = h;        cache = new Integer[(high - low) + 1];        int j = low;        for(int k = 0; k < cache.length; k++)            cache[k] = new Integer(j++);        // range [-128, 127] must be interned (JLS7 5.1.7)        assert IntegerCache.high >= 127;    }    private IntegerCache() {}}

結論

本文簡單分析了下Integer類型的==比較,解釋了為啥結果不一致,所以今后碰到Integer比較的時候,建議使用equals。N0d28資訊網——每日最新資訊28at.com

同理,Byte、Shot、Long等,也有Cache,各位記得翻看源碼!N0d28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-11190-0.htmlJava判斷Integer相等-應該這樣用

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 為什么建議用const,enum,inline 替換 #define?

下一篇: String和Const char*參數類型選擇的合理性對比

標簽:
  • 熱門焦點
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 超級標準版旗艦!iQOO 11S全球首發iQOO超算獨顯芯片

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • Windows 11發布,微軟一改往常對老機型開放的態度

    距離 Windows 11 發布已經過去一周,在過去一周里,很多數碼愛好者圍繞其對 Android 應用的支持、對老機型的升級問題展開了激烈討論。與以往不同的是,在這次大
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
  • 與兆芯合作 聯想推出全新旗艦版筆記本電腦開天N7系列

    聯想與兆芯合作推出全新聯想旗艦版筆記本電腦開天 N7系列。這個系列采用兆芯KX-6640MA處理器平臺,KX-6640MA 處理器是采用了陸家嘴架構,16nm 工藝,4 核 4 線
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top