基礎:
#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中文網其他相關文章!