激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Integer IntegerCache源碼閱讀

Integer IntegerCache源碼閱讀

2021-03-18 11:54Mr_伍先生 Java教程

這篇文章主要介紹了Integer IntegerCache源碼閱讀,具有一定借鑒價(jià)值,需要的朋友可以參考下

先看一段測(cè)試結(jié)果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*public static void main(String[] args) {
    Integer a = 128, b = 128;
    Integer c = 127, d = 127;
    System.out.println(a == b);//false
    System.out.println(c == d);//true
 
  }*/
  
  /*public static void main(String[] args) {
    Integer int1 = Integer.valueOf("100");
    Integer int2 = Integer.valueOf("100");
    System.out.println(int1 == int2);//true
  }*/
 
  public static void main(String[] args) {
    Integer int1 = Integer.valueOf("300");
    Integer int2 = Integer.valueOf("300");
    System.out.println(int1 == int2);//false
  }

JDK的源碼如下:

?
1
2
3
4
5
6
7
8
9
public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));
  }
 
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
      return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
  }

發(fā)現(xiàn)里面另有玄機(jī),多了個(gè)IntegerCache類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];
 
    static {
      // high value may be configured by property
      int h = 127;
      String integerCacheHighPropValue =
        sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
      if (integerCacheHighPropValue != null) {
        try {
          int i = parseInt(integerCacheHighPropValue);
          i = Math.max(i, 127);
          // Maximum array size is Integer.MAX_VALUE
          h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
        } catch( NumberFormatException nfe) {
          // If the property cannot be parsed into an int, ignore it.
        }
      }
      high = h;
 
      cache = new Integer[(high - low) + 1];
      int j = low;
      for(int k = 0; k < cache.length; k++)
        cache[k] = new Integer(j++);
 
      // range [-128, 127] must be interned (JLS7 5.1.7)
      assert IntegerCache.high >= 127;
    }
 
    private IntegerCache() {}
  }

原來Integer把-128到127(可調(diào))的整數(shù)都提前實(shí)例化了。

這就解釋了答案,原來你不管創(chuàng)建多少個(gè)這個(gè)范圍內(nèi)的Integer用ValueOf出來的都是同一個(gè)對(duì)象。

但是為什么JDK要這么多此一舉呢? 我們仔細(xì)想想, 淘寶的商品大多數(shù)都是100以內(nèi)的價(jià)格, 一天后臺(tái)服務(wù)器會(huì)new多少個(gè)這個(gè)的Integer, 用了IntegerCache,就減少了new的時(shí)間也就提升了效率。同時(shí)JDK還提供cache中high值得可配置,

這無疑提高了靈活性,方便對(duì)JVM進(jìn)行優(yōu)化。

總結(jié)

以上就是本文關(guān)于Integer IntegerCache源碼閱讀的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

原文鏈接:http://www.cnblogs.com/mr-wuxiansheng/p/7498678.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕一区二区三区久久 | 一级电影免费在线观看 | 国产精品.com | 欧美性生交xxxxx免费观看 | a黄网站 | 日韩色电影 | 丁香桃色网 | 久久久久久免费 | 91香焦视频 | 黄色免费入口 | 国产精选电影免费在线观看网站 | 一级视频网站 | 一级毛片真人免费播放视频 | 成人免费午夜视频 | 久久久久女人精品毛片 | 日本精品久久久一区二区三区 | 看片91| 亚洲91网| 成人在线免费观看网址 | 久久久久久久久亚洲精品 | 亚洲成人在线视频网 | 成人在线观看一区 | 国产91精品一区二区麻豆亚洲 | 一区二区三区在线观看国产 | 在线视频 欧美日韩 | 精品国产三级a | 亚洲午夜在线观看 | 92看片淫黄大片一级 | 国产精品午夜一区 | 在线观看一区二区三区四区 | 国产精品久久久久久久久久 | 亚洲最新色 | 亚洲精品久久久久久久久久 | 国产一级免费视频 | 欧美国产一区二区三区激情无套 | 精品国产一级毛片 | 羞羞的视频免费观看 | 久久人操 | av免费在线观看国产 | 牛牛视频在线 | av在线日韩 |