0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么Java中1000==1000為false,而100==100為true呢

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)分析與開發(fā) ? 作者:codeceo ? 2020-11-19 15:51 ? 次閱讀

為什么 Java 中“1000==1000”為false,而”100==100“為true? 這是一個挺有意思的討論話題。 如果你運行下面的代碼:

Integera=1000,b=1000; System.out.println(a==b);//1 Integerc=100,d=100; System.out.println(c==d);//2

你會得到

false true

基本知識:我們知道,如果兩個引用指向同一個對象,用==表示它們是相等的。如果兩個引用指向不同的對象,用==表示它們是不相等的,即使它們的內(nèi)容相同。

因此,后面一條語句也應該是false 。

這就是它有趣的地方了。

如果你看去看 Integer.java 類,你會發(fā)現(xiàn)有一個內(nèi)部私有類,IntegerCache.java,它緩存了從-128到127之間的所有的整數(shù)對象

所以事情就成了,所有的小整數(shù)在內(nèi)部緩存,然后當我們聲明類似——

Integerc=100;

的時候,它實際上在內(nèi)部做的是:

Integeri=Integer.valueOf(100);

現(xiàn)在,如果我們?nèi)タ磛alueOf()方法,我們可以看到

publicstaticIntegervalueOf(inti){ if(i>=IntegerCache.low&&i returnIntegerCache.cache[i+(-IntegerCache.low)]; returnnewInteger(i); }

如果值的范圍在-128到127之間,它就從高速緩存返回實例。

所以…

Integerc=100,d=100;

指向了同一個對象。

這就是為什么我們寫

System.out.println(c==d);

我們可以得到true。

現(xiàn)在你可能會問,為什么這里需要緩存?

合乎邏輯的理由是,在此范圍內(nèi)的“小”整數(shù)使用率比大整數(shù)要高,因此,使用相同的底層對象是有價值的,可以減少潛在的內(nèi)存占用。

然而,通過反射API你會誤用此功能。

運行下面的代碼,享受它的魅力吧

publicstaticvoidmain(String[]args)throwsNoSuchFieldException,IllegalAccessException{ Classcache=Integer.class.getDeclaredClasses()[0];//1 FieldmyCache=cache.getDeclaredField("cache");//2 myCache.setAccessible(true);//3 Integer[]newCache=(Integer[])myCache.get(cache);//4 newCache[132]=newCache[133];//5 inta=2; intb=a+a; System.out.printf("%d+%d=%d",a,a,b);// }

責任編輯:xj

點贊和在看就是最大的支持

原文標題:為什么 Java 中“1000==1000”為false,而”100==100“為true?

文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2948

    瀏覽量

    104386
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7581

    瀏覽量

    135643

原文標題:為什么 Java 中“1000==1000”為false,而”100==100“為true?

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    INA333 RG接100歐不是放大1000倍嗎?怎么輸出才2倍左右?

    RG接100歐不是放大1000倍嗎?怎么輸出才2倍左右?請問要放大1000倍如何接才正確?
    發(fā)表于 09-11 07:25

    為什么TLV9002的開環(huán)輸出阻抗1200多,TLV9062的開環(huán)輸出阻抗100?

    為什么TLV9002的開環(huán)輸出阻抗1200多? TLV9062的開環(huán)輸出阻抗100? 數(shù)據(jù)差這么多有什么差異嗎?會有什么影響嗎?謝謝!
    發(fā)表于 08-14 06:07

    是否可以將默認configTICK_RATE_HZ 100Hz更改為1000Hz?

    我需要 1 毫秒的計時器精度,最好不使用硬件計時器。 是否可以將默認configTICK_RATE_HZ 100Hz 更改為 1000Hz?
    發(fā)表于 07-10 07:36

    配備銅纜和光纖接口的 DP83869HM 高抗擾性 10/100/1000以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《配備銅纜和光纖接口的 DP83869HM 高抗擾性 10/100/1000以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 06-27 09:45 ?0次下載
    配備銅纜和光纖接口的 DP83869HM 高抗擾性 10/<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表

    DP83867E/IS/CS穩(wěn)健型高抗擾性小型10/100/1000以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《DP83867E/IS/CS穩(wěn)健型高抗擾性小型10/100/1000以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 06-19 15:08 ?0次下載
    DP83867E/IS/CS穩(wěn)健型高抗擾性小型10/<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表

    DP83867IR/CR穩(wěn)健型高抗擾性10/100/1000以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《DP83867IR/CR穩(wěn)健型高抗擾性10/100/1000以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 06-19 15:06 ?0次下載
    DP83867IR/CR穩(wěn)健型高抗擾性10/<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>以太網(wǎng)物理層收發(fā)器數(shù)據(jù)表

    智嵌物聯(lián)100/1000BASE-T1千兆車載以太網(wǎng)交換機

    ZQWL-AES6502是智嵌物聯(lián)自主研發(fā)生產(chǎn)的一款2+5端口千兆車載以太網(wǎng)(100/1000BASE-T1)交換機。具有2個RJ45千兆網(wǎng)口(100BASE-Tx/1000BASE-
    的頭像 發(fā)表于 06-06 09:29 ?883次閱讀
    智嵌物聯(lián)<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>BASE-T1千兆車載以太網(wǎng)交換機

    1000兆網(wǎng)線和100兆網(wǎng)線壓線區(qū)別大嗎

    1000兆網(wǎng)線和100兆網(wǎng)線在壓線方面存在一些差異,但具體差異大小取決于網(wǎng)線的類型和制作工藝。 首先,1000兆網(wǎng)線通常采用的是六類網(wǎng)線或超五類網(wǎng)線,
    的頭像 發(fā)表于 04-02 10:22 ?482次閱讀

    康謀產(chǎn)品 | 用于100/1000BASE-T1網(wǎng)絡的車載以太網(wǎng)開發(fā)工具

    1000可將100/1000BASE-T1信號轉(zhuǎn)換為100BASE-TX/1000BASE-T以太網(wǎng)。 一、NETLion
    的頭像 發(fā)表于 01-23 17:32 ?313次閱讀
    康謀產(chǎn)品 | 用于<b class='flag-5'>100</b>/<b class='flag-5'>1000</b>BASE-T1網(wǎng)絡的車載以太網(wǎng)開發(fā)工具

    使用ADAS1000遇到的問題求解答

    以波形的形式顯示,與模擬器發(fā)出來的波形相對比,明顯不同。模擬器發(fā)出的波形的QRS是向上的波形,0x11數(shù)據(jù)波形QRS波形是向下的波形。 4、AC leadoff檢測不到導聯(lián)脫落,呼吸阻抗檢測幅值
    發(fā)表于 12-20 08:14

    用STM32和ADAS1000通信,在初始化配置的時候需要把ADAS1000配置從模式嗎?

    我用STM32和ADAS1000通信,請問我在初始化配置的時候需要把ADAS1000配置從模式嗎?
    發(fā)表于 12-20 06:03

    為什么1000base-T1在mdi上傳輸頻率750MHz?

    車載以太網(wǎng)在數(shù)據(jù)發(fā)送過程的編碼,4b-3b-2t-pam3。其中在3b-2t的時候,導致頻率降為原來的2/3,所以100base-T1的mdi傳輸頻率66.7MHz;對于1000b
    發(fā)表于 12-13 11:24

    ad7124-8配置激勵電流1000微安,但是實際輸出只有880微安怎么解決?

    在IO_Control1寄存器配置冷端的激勵電流1000微安,但是用示波器測量只有880微安; 當這個電流流過2K的電阻時產(chǎn)生的電壓達不到預期的2000Mv, 請問這個問題怎么解決? 如果在軟件
    發(fā)表于 12-11 08:02

    2K1000核心板在能源管理系統(tǒng)產(chǎn)品方案

    2K1000核心板在能源管理系統(tǒng)產(chǎn)品方案
    的頭像 發(fā)表于 11-17 14:15 ?449次閱讀
    迅<b class='flag-5'>為</b>2K<b class='flag-5'>1000</b>核心板在能源管理系統(tǒng)產(chǎn)品方案

    100/1000BASE-T1千兆車載以太網(wǎng)轉(zhuǎn)換器

    ZQWL-AE101K是一款千兆車載以太網(wǎng)(100/1000BASE-T1)到 RJ45普通以太網(wǎng)(100/1000BASE-TX)的轉(zhuǎn)接器。該設備實現(xiàn)了普通以太網(wǎng)和千兆車載以太網(wǎng)的物
    的頭像 發(fā)表于 10-31 17:35 ?1064次閱讀
    <b class='flag-5'>100</b>/<b class='flag-5'>1000</b>BASE-T1千兆車載以太網(wǎng)轉(zhuǎn)換器