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

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

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

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

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

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

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

你會(huì)得到

false true

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

因此,后面一條語(yǔ)句也應(yīng)該是false 。

這就是它有趣的地方了。

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

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

Integerc=100;

的時(shí)候,它實(shí)際上在內(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之間,它就從高速緩存返回實(shí)例。

所以…

Integerc=100,d=100;

指向了同一個(gè)對(duì)象。

這就是為什么我們寫(xiě)

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

我們可以得到true。

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

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

然而,通過(guò)反射API你會(huì)誤用此功能。

運(yùn)行下面的代碼,享受它的魅力吧

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);// }

責(zé)任編輯:xj

點(diǎn)贊和在看就是最大的支持

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

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

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

    關(guān)注

    19

    文章

    2971

    瀏覽量

    104855
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7608

    瀏覽量

    137115

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)LDC1000是否可以測(cè)量大線圈?

    我使用TI 提供的 LDC1000EVM 模塊 測(cè)量電感線圈(線圈尺寸 1m*0.5m在100khz下 電感量:27uH Rs:0.3歐),并聯(lián)電容100pF. 使用TI提供的軟件
    發(fā)表于 01-08 07:13

    74ALVC164245是否能支持速率100Mbps的信號(hào)轉(zhuǎn)換

    請(qǐng)幫忙確認(rèn)74ALVC164245是否能支持速率100Mbps的信號(hào)轉(zhuǎn)換,Datasheet上并沒(méi)有找到明確的描述,謝謝!
    發(fā)表于 12-11 06:51

    【迅電子】龍芯LS2K1000LA和LS2K1000有何區(qū)別?

    【迅電子】龍芯LS2K1000LA和LS2K1000有何區(qū)別?
    的頭像 發(fā)表于 11-13 14:13 ?291次閱讀
    【迅<b class='flag-5'>為</b>電子】龍芯LS2K<b class='flag-5'>1000</b>LA和LS2K<b class='flag-5'>1000</b>有何區(qū)別?

    【北京迅】itop-龍芯2k1000開(kāi)發(fā)指南Linux基礎(chǔ)入門(mén)vim 編輯器

    【北京迅】itop-龍芯2k1000開(kāi)發(fā)指南Linux基礎(chǔ)入門(mén)vim 編輯器
    的頭像 發(fā)表于 10-25 14:56 ?325次閱讀
    【北京迅<b class='flag-5'>為</b>】itop-龍芯2k<b class='flag-5'>1000</b>開(kāi)發(fā)指南Linux基礎(chǔ)入門(mén)vim 編輯器

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

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

    使用LM358對(duì)模擬信號(hào)進(jìn)行放大,電源輸出100mA時(shí)對(duì)VCC進(jìn)行兩級(jí)放大,信號(hào)非常紊亂,為什么?

    在使用LM358對(duì)模擬信號(hào)進(jìn)行放大時(shí)發(fā)現(xiàn)(放大倍數(shù)1000倍左右),電源的輸出100mA時(shí)(遠(yuǎn)大于負(fù)載電流)對(duì)VCC進(jìn)行兩級(jí)放大,信號(hào)非常紊亂。且出現(xiàn)電源輸出越大,信號(hào)越平穩(wěn)。下
    發(fā)表于 08-30 07:56

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

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

    是否可以將默認(rèn)configTICK_RATE_HZ 100Hz更改為1000Hz?

    我需要 1 毫秒的計(jì)時(shí)器精度,最好不使用硬件計(jì)時(shí)器。 是否可以將默認(rèn)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èi)下載
    發(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èi)下載
    發(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èi)下載
    發(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ù)表

    溫度傳感器PT1000工作原理是什么

    PT1000定義 PT1000是一種鉑電阻溫度傳感器,其電阻值隨溫度的變化變化。PT是Platinum的縮寫(xiě),1000表示在0℃時(shí),其電阻值
    的頭像 發(fā)表于 06-19 14:14 ?5378次閱讀

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

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

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

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

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

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