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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

香港云服务器
服務器之家 - 編程語言 - Java教程 - Java拆裝箱深度剖析

Java拆裝箱深度剖析

2020-07-20 13:32令仔很忙 Java教程

這篇文章主要為大家深度剖析了Java拆箱裝箱的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

先來看一段代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main{
  public static void main(String[] args){
 
    Integer num1 = 100;
    Integer num2 = 100;
    Integer num3 = 200;
    Integer num4 = 200;
 
    '''//輸出結果'''
    System.out.println(num1==num2);
    System.out.println(num3==num4);
  }
}

猜猜結果是什么?

很多人都會認為結果全為true,但結果去不是這樣的

true
false

為什么是這樣的結果?如果用內存來解釋結果的話,num1和num2指向的是同一個對象,而num3和num4則指向的確是不同的對象。接下來就告訴你為什么,看一看Integer類型的valueof方法的源碼:

?
1
2
3
4
5
6
public static Integer valueOf(int i) {
  assert IntegerCache.high >= 127;
  if (i >= IntegerCache.low && i <= IntegerCache.high)
    return IntegerCache.cache[i + 128];
  return new Integer(i);
  }

其中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
'''// IntegerCache,一個內部類,注意它的屬性都是定義為static final'''
  private static class IntegerCache {
    static final int high; '''//緩存上界,暫為null'''
    static final Integer cache[]; '''//緩存的整型數組'''
 
    '''// 塊,為什么定義為塊'''
    static {
      final int low = -128; '''// 緩存下界,不可變了。只有上界可以改變'''
 
      '''// high value may be configured by property'''
      '''// h值,可以通過設置jdk的AutoBoxCacheMax參數調整(以下有解釋),自動緩存區間設置為[-128,N]。注意區間的下界是固定'''
      int h = 127;
 
      if (integerCacheHighPropValue != null) {
        '''// Use Long.decode here to avoid invoking methods that'''
        '''// require Integer's autoboxing cache to be initialized'''
        // 通過解碼integerCacheHighPropValue,而得到一個候選的上界值'''
        int i = Long.decode(integerCacheHighPropValue).intValue();
        '''// 取較大的作為上界,但又不能大于Integer的邊界MAX_VALUE'''
        i = Math.max(i, 127);  
        '''// Maximum array size is Integer.MAX_VALUE'''
        h = Math.min(i, Integer.MAX_VALUE - -low);
      }
      high = h; '''//上界確定'''
      '''// 就可以創建緩存塊,注意緩存數組大小'''
      cache = new Integer[(high - low) + 1]; //
      int j = low;
      for(int k = 0; k < cache.length; k++)
        cache[k] = new Integer(j++); '''// -128到high值逐一分配到緩存數組'''
    }
 
    private IntegerCache() {}
  }

通過這兩段代碼可以看出,在通過valueof方法創建Integer類型對象時,取值范圍為[-128,127],數值在這個區間里,指針指向IntegerCache.cache中已經存在的對象引用,當數值超出這個范圍,就會創建一個新的對象。

有一點需要注意的是,并不是所有的類型都是這個范圍,看Double類型:

?
1
2
3
4
5
6
7
8
9
10
11
12
public class Main{
  public static void main(String[] args){
 
    Double i1 = 100.0;
    Double i2 = 100.0;
    Double i3 = 200.0;
    Double i4 = 200.0;
 
    System.out.println(i1==i2);
    System.out.println(i3==i4);
  }
}

最終的輸出結果:

false
false

具體為什么回事這樣的結果,大伙可以去看看源代碼中Double valueof方法的實現,其和Integer valueof方法不同,是因為在某個范圍內的整型數值的個數是有限的,而浮點數卻不是。

注意,Integer、Short、Byte、Character、Long這幾個類的valueOf方法的實現是類似的。
Double、Float的valueOf方法的實現是類似的。

拉下了一個,Boolean類型的結果有兩個True or False。直接看源代碼:

?
1
2
3
public static Boolean valueOf(boolean b) {
    return (b ? TRUE : FALSE);
  }

而其中的TRUE和FALSE是這樣定義的:

?
1
2
3
4
5
6
7
public static final Boolean TRUE = new Boolean(true);
 
'''/** '''
'''* The <code>Boolean</code> object corresponding to the primitive '''
'''* value <code>false</code>. '''
'''*/'''
public static final Boolean FALSE = new Boolean(false);

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
348
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 一级片国产片 | 91资源在线观看 | 久久网日本 | 91精品免费在线 | 欧美性生活xxxxx | 91精品国产综合久久婷婷香蕉 | 成人福利在线播放 | 久久久国产视频 | 久久精精品 | 青草视频在线观看视频 | 久久亚洲第一 | 中国大陆高清aⅴ毛片 | 精品一区二区三区在线观看视频 | 精品一区二区三区免费毛片 | 操你视频 | 欧美一区二区三区免费电影 | 免费观看视频在线观看 | 黄片毛片一级 | 高清中文字幕在线 | 免费观看黄色一级视频 | 国产羞羞网站 | 91亚洲精品一区二区福利 | 一级黄色a视频 | 欧美日韩在线影院 | 黄色免费视频在线 | 操碰视频在线观看 | 91情侣偷在线精品国产 | 国产在线一级视频 | 7777欧美| 成人免费自拍视频 | 国产精品久久久久免费视频 | 一级爱爱| 精国产品一区二区三区 | 二区三区偷拍浴室洗澡视频 | 国产麻豆交换夫妇 | 成人做爰www免费看 欧美精品免费一区二区三区 | 日韩午夜一区二区三区 | 激情综合在线观看 | 天天艹综合 | 久久精品无码一区二区日韩av | a免费视频 |