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

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

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

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

先看下這段代碼,然后猜下結果:VOW28資訊網——每日最新資訊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小伙伴會算錯!VOW28資訊網——每日最新資訊28at.com

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

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

為什么發生以上結果?

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

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

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

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

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 石頭自清潔掃拖機器人G10S評測:多年黑科技集大成之作 懶人終極福音

    科技圈經常能看到一個詞叫“縫合怪”,用來形容那些把好多功能或者外觀結合在一起的產品,通常這樣的詞是貶義詞,但如果真的是產品縫合的好、縫合的實用的話,那它就成了中性詞,今
  • 6月iOS設備好評榜:第一蟬聯榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結。現在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內上線了&ldquo;本地生活&rdquo;入口,位置較深,位于首頁的&ldquo;充值中心&rdquo;內,目前主要售賣美食相關的
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 小米公益基金會捐贈2500萬元馳援北京、河北暴雨救災

    8月2日消息,今日小米科技創始人雷軍在其微博上發布消息稱,小米公益基金會宣布捐贈2500萬元馳援北京、河北暴雨救災。攜手抗災,京冀安康!以下為公告原文
  • 小米MIX Fold 3配置細節曝光:搭載領先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
Top