首頁  >  文章  >  Java  >  java integer和int的差別有哪些

java integer和int的差別有哪些

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-12-27 11:42:582773瀏覽

java integer和int的差別有哪些

基礎:

#1、int 是java 的基礎資料型,而integer 則是int 的一個封裝類別。

2、Integer 變數必須實例化之後才能使用,而 int 變數則不需要。

3、Integer 實際上是物件的引用,當 new 一個 integer 物件時,實際上是產生指標指向該物件;而 int 則是直接儲存資料值。

4、Integer 的預設值是 null ,而 int 的預設值是 0。

延伸:

1、因為integer 變數其實是對integer 物件的引用,所以兩個透過new 的integer 變數永遠不相等(因為new 產生的是兩個對象,其記憶體位址不一樣)。

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j);//false

2、當一個integer 變數和一個int 變數比較時,只要兩個變數的值相等,那麼結果就是true,因為integer 本質是int 的一個封裝類,當兩數比較時,java會自動將integer拆包,所以本質上就是兩個int 變數的比較。

Integer i = new Integer(100);
int j = 100;
System.out.print(i == j);//true

3、當一個 new 建立的 Integer 變數和一個非 new 建立的 Integer 變數比較時,結果為false。因為非 new 建立的變數存在 java 常數池中,而 new 建立的變數指向堆中新建的對象,兩者的記憶體位址不同。

Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j);//false

4、當兩個非 new 的 Integer 變數比較時,如果兩個變數的值在-128到127之間,那麼結果就是 true,否則是 false。

對於這個奇怪的結果,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 的數,java會進行緩存,而下次再對一個Integer 變數賦值時,如果在-128~127 並且已經被緩存,那麼就會直接從緩存中調用。

PHP中文網,有大量免費的JAVA入門教學,歡迎大家學習!

以上是java integer和int的差別有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn