91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中100==100卻為true,而1000==1000為false的原因

發布時間:2020-11-04 18:22:25 來源:億速云 閱讀:194 作者:Leah 欄目:開發技術

Java中100==100卻為true,而1000==1000為false的原因?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

如果你運行下面的代碼

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 類,你會發現有一個內部私有類,IntegerCache.java,它緩存了從-128到127之間的所有的整數對象。

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

Integer c = 100;

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

Integer i = Integer.valueOf(100);

現在,如果我們去看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。

現在你可能會問,為什么這里需要緩存?

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

然而,通過反射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); //
  }

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贵溪市| 双峰县| 樟树市| 札达县| 江源县| 迁西县| 油尖旺区| 岐山县| 中山市| 土默特右旗| 江津市| 鹤岗市| 乌鲁木齐市| 扶风县| 岐山县| 依兰县| 广安市| 司法| 高邮市| 丁青县| 阿拉尔市| 鸡东县| 海阳市| 唐河县| 雷波县| 石门县| 松潘县| 桂东县| 福建省| 兴国县| 积石山| 宿松县| 泸溪县| 封丘县| 木兰县| 湾仔区| 雷山县| 宁波市| 台湾省| 金川县| 大名县|