最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談為什么Java中1000==1000為false而100==100為true

 更新時間:2020年09月09日 15:47:58   作者:碼農網(wǎng) – 小峰  
這篇文章主要介紹了淺談為什么Java中1000==1000為false而100==100為true,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

這是一個挺有意思的討論話題。

如果你運行下面的代碼

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

你會得到

false
true

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

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

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

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

Integer c = 100;

的時候,它實際上在內部做的是

Integer i = Integer.valueOf(100);

現(xiàn)在,如果我們去看valueOf()方法,我們可以看到

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

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

所以…

Integer c = 100, d = 100;

指向了同一個對象。

這就是為什么我們寫

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

我們可以得到true。

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

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

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

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

public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {

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

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

   int a = 2;
   int b = a + a;
   System.out.printf("%d + %d = %d", a, a, b); //
  }

英文原文:Why 1000 == 1000 Returns False, but 100 == 100 Returns True in Java?

到此這篇關于淺談為什么Java中1000==1000為false而100==100為true的文章就介紹到這了,更多相關Java 1000==1000為false 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • HttpUtils 發(fā)送http請求工具類(實例講解)

    HttpUtils 發(fā)送http請求工具類(實例講解)

    下面小編就為大家?guī)硪黄狧ttpUtils 發(fā)送http請求工具類(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • java中Serializable接口作用詳解

    java中Serializable接口作用詳解

    這篇文章主要為大家詳細介紹了java中Serializable接口作用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 非常適合新手學生的Java線程池優(yōu)化升級版

    非常適合新手學生的Java線程池優(yōu)化升級版

    作者是一個來自河源的大三在校生,以下筆記都是作者自學之路的一些淺薄經(jīng)驗,如有錯誤請指正,將來會不斷的完善筆記,幫助更多的Java愛好者入門
    2022-03-03
  • Java多線程之火車售票系統(tǒng)

    Java多線程之火車售票系統(tǒng)

    這篇文章主要為大家詳細介紹了Java多線程之火車售票系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 使用Spring?Boot?2.x構建Web服務的詳細代碼

    使用Spring?Boot?2.x構建Web服務的詳細代碼

    這篇文章主要介紹了使用Spring?Boot?2.x構建Web服務的詳細代碼,主要基于JWT的身份認證,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 基于Java中throw和throws的區(qū)別(詳解)

    基于Java中throw和throws的區(qū)別(詳解)

    下面小編就為大家?guī)硪黄贘ava中throw和throws的區(qū)別(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • JAVA8獲取list集合中重復的元素與獲取去重數(shù)據(jù)實例

    JAVA8獲取list集合中重復的元素與獲取去重數(shù)據(jù)實例

    這篇文章主要給大家介紹了關于JAVA8獲取list集合中重復的元素與獲取去重數(shù)據(jù)的相關資料,在實際開發(fā)中經(jīng)常會遇到需要找出(刪除)一個list中某些元素的屬性相同的元素,需要的朋友可以參考下
    2023-07-07
  • Quartz之Job與JobDetail深入解析

    Quartz之Job與JobDetail深入解析

    下面小編就為大家?guī)硪黄猀uartz之Job與JobDetail深入解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • JAVA抽象類及接口使用方法解析

    JAVA抽象類及接口使用方法解析

    這篇文章主要介紹了JAVA抽象類及接口使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • springboot中使用ElasticSearch的詳細教程

    springboot中使用ElasticSearch的詳細教程

    這篇文章主要介紹了ElasticSearch在springboot中使用的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05

最新評論

南平市| 颍上县| 嘉善县| 崇左市| 厦门市| 达州市| 伊通| 益阳市| 合阳县| 铜山县| 安阳市| 西乌珠穆沁旗| 山丹县| 陈巴尔虎旗| 宜黄县| 马龙县| 横山县| 卓资县| 满洲里市| 溧阳市| 灵石县| 潜山县| 内乡县| 厦门市| 九台市| 客服| 淳安县| 根河市| 马公市| 谢通门县| 同德县| 新宁县| 洪湖市| 白城市| 元朗区| 铜川市| 和平县| 濮阳市| 宿松县| 酒泉市| 来凤县|