為什么Integer 100 == Integer 100而1000 != 1000?

如果運行如下代碼

Integer a = 1000, b = 1000; 
System.out.println(a == b);
Integer c = 100, d = 100; 
System.out.println(c == d);

你會得到下面的結(jié)果

false
true

我們知道 == 比較的是引用指向的對象是否相同,內(nèi)存地址是否一樣。如果查看Integer的代碼就會發(fā)現(xiàn)當(dāng)你聲明Integer a = 100;實際上,運行的是Integer a = Integer.valueOf(100)),繼續(xù)查看ValueOf函數(shù)

public static Integer valueOf(int i) {
      if (i >= IntegerCache.low && i
          return IntegerCache.cache[i + (-IntegerCache.low)];
      return new Integer(i);
    }

如果值在-128到127之間,它就會返回該緩存的實例。至此就明白了以上問題。下面就是個很有趣的例子.

        Class cache = Integer.class.getDeclaredClasses()[0]; 
        Field myCache = cache.getDeclaredField("cache"); 
        myCache.setAccessible(true);

        Integer[] newCache = (Integer[]) myCache.get(cache); 
        newCache[132] = newCache[133]; 

        int a = 2;
        int b = a + a;
        System.out.printf("%d + %d = %d", a, a, b); 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評論 19 139
  • 怎么如此平靜, 感覺像是走錯了片場.為什么呢, 因為上下游工作在同一個線程呀騷年們! 這個時候上游每次調(diào)用emit...
    Young1657閱讀 1,672評論 2 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,641評論 18 399
  • 前言 看大神推薦的書單中入門有這么一本書,所以決定把這本書的精華(自認(rèn)為很有用的點),或許是我自己現(xiàn)在能用到的點都...
    我沒有三顆心臟閱讀 2,371評論 0 6
  • 原來,我一直在被寵愛,可是他不說,所以我不知道。 我知道自己已經(jīng)深深的愛上他,他亦愛我,我用了三年的時間看懂他,了...
    亞茹_我是阿茹閱讀 173評論 0 0

友情鏈接更多精彩內(nèi)容