国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Integer與int的比較

2019-11-06 06:30:02
字體:
來源:轉載
供稿:網友

Integer與int的種種比較

  如果面試官問Integer與int的區別:估計大多數人只會說道兩點,Ingeter是int的包裝類,int的初值為0,Ingeter的初值為null。但是如果面試官再問一下Integer i = 1;int ii = 1; i==ii為true還是為false?估計就有一部分人答不出來了,如果再問一下其他的,估計更多的人會頭腦一片混亂。所以我對它們進行了總結,希望對大家有幫助。

  首先看代碼:

復制代碼
 1 package com.test; 2 /** 3  *  4  * @author 劉玲 5  * 6  */ 7 public class TestInteger { 8  9     /**10      * @param args11      */12     public static void main(String[] args) {13         int i = 128;14         Integer i2 = 128;15         Integer i3 = new Integer(128);16         //Integer會自動拆箱為int,所以為true17         System.out.PRintln(i == i2);18         System.out.println(i == i3);19         System.out.println("**************");20         Integer i5 = 127;//java在編譯的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);21         Integer i6 = 127;22         System.out.println(i5 == i6);//true23         /*Integer i5 = 128;24         Integer i6 = 128;25         System.out.println(i5 == i6);//false26 */        Integer ii5 = new Integer(127);27         System.out.println(i5 == ii5); //false28         Integer i7 = new Integer(128);29         Integer i8 = new Integer(123);30         System.out.println(i7 == i8);  //false31     }32 33 }復制代碼

首先,17行和18行輸出結果都為true,因為Integer和int比都會自動拆箱(jdk1.5以上)。

22行的結果為true,而25行則為false,很多人都不動為什么。其實java在編譯Integer i5 = 127的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);所以關鍵就是看valueOf()函數了。只要看看valueOf()函數的源碼就會明白了。JDK源碼的valueOf函數式這樣的:

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

看一下源碼大家都會明白,對于-128到127之間的數,會進行緩存,Integer i5 = 127時,會將127進行緩存,下次再寫Integer i6 = 127時,就會直接從緩存中取,就不會new了。所以22行的結果為true,而25行為false。

對于27行和30行,因為對象不一樣,所以為false。

我對于以上的情況總結如下:

  ①無論如何,Integer與new Integer不會相等。不會經歷拆箱過程,i3的引用指向堆,而i4指向專門存放他的內存(常量池),他們的內存地址不一樣,所以為false  ②兩個都是非new出來的Integer,如果數在-128到127之間,則是true,否則為false  java在編譯Integer i2 = 128的時候,被翻譯成-> Integer i2 = Integer.valueOf(128);而valueOf()函數會對-128到127之間的數進行緩存  ③兩個都是new出來的,都為false  ④int和integer(無論new否)比,都為true,因為會把Integer自動拆箱為int再去比


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双江| 海南省| 清原| 咸宁市| 文昌市| 龙里县| 福泉市| 乐至县| 宁海县| 江达县| 滦平县| 榆中县| 永清县| 荥经县| 哈巴河县| 商城县| 江陵县| 长沙县| 宣化县| 永定县| 凤城市| 扎兰屯市| 宜春市| 鄂托克前旗| 石景山区| 高台县| 绍兴市| 丰顺县| 元江| 柞水县| 巴林左旗| 兴仁县| 来安县| 郎溪县| 龙南县| 宁化县| 泸西县| 桐城市| 安徽省| 改则县| 鄯善县|