基礎(chǔ):
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)土默特右旗,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
1、int 是 java 的一種基礎(chǔ)數(shù)據(jù)類型,而 integer 是int 的一個封裝類。
2、Integer 變量必須實例化之后才能使用,而 int 變量不需要。
3、Integer 實際是對象的引用,當(dāng) new 一個 integer 對象時,實際上是生成一個指針指向該對象;而 int 是直接存儲數(shù)據(jù)值。
4、Integer 的默認值是 null ,而 int 的默認值是 0。
延伸:
1、因為 integer 變量實際上是對 integer 對象的引用,所以兩個通過new 的integer 變量永遠不相等(因為 new 生成的是兩個對象,其內(nèi)存地址不一樣)。
Integer i = new Integer(100); Integer j = new Integer(100); System.out.print(i == j);//false
2、當(dāng)一個 integer 變量和一個 int 變量比較時,只要兩個變量的值相等,那么結(jié)果就是true,因為 integer 本質(zhì)是 int 的一個封裝類,當(dāng)兩數(shù)比較時,java會自動將 integer拆包,所以本質(zhì)上就是兩個int 變量的比較。
Integer i = new Integer(100); int j = 100; System.out.print(i == j);//true
3、當(dāng)一個 new 創(chuàng)建的 Integer 變量和一個非 new 創(chuàng)建的 Integer 變量比較時,結(jié)果為false。因為非 new 創(chuàng)建的變量存在 java 常量池中,而 new 創(chuàng)建的變量指向堆中新建的對象,兩者的內(nèi)存地址不同。
Integer i = new Integer(100); Integer j = 100; System.out.print(i == j);//false
4、當(dāng)兩個非 new 的 Integer 變量比較時,如果兩個變量的值在-128到127之間,那么結(jié)果就是 true,否則是 false。
對于這個奇怪的結(jié)果,java 的解釋是這樣的:
Integer i = new Integer(100);//在編譯時會變成Integer i = Integer.ValueOf(100)
而 java API 中對 Integer.valueOf()的定義如下:
public static Integer valueOf(int i){ assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high){ return IntegerCache.cache[i + (-IntegerCache.low)]; } return new Integer(i); }
即,對于 -128~127 的數(shù),java會進行緩存,而下次再對一個 Integer 變量賦值時,如果在 -128~127 并且已經(jīng)被緩存,那么就會直接從緩存中調(diào)用。
以上就是java integer和int的區(qū)別有哪些的詳細內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!