1. 程式人生 > 其它 >int和Integer比較

int和Integer比較

轉自:

http://www.java265.com/JavaJingYan/202205/16539168423572.html

下文筆者講述java中int和Integer型別的比較,如下所示
int和Integer型別比較

1:Integer是int的包裝類,int則是java的一種基本資料型別
2:Integer變數必須例項化後才能使用,而int變數不需要
3:Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資料值
4:Integer的預設值是null,int的預設值是0

一:由於Integer變數實際上是對一個Integer物件的引用 所以兩個通過new生成的Integer變數永遠是不相等的(因為new生成的是兩個物件,其記憶體地址不同)

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

二:Integer變數和int變數比較時,只要兩個變數的值是向等的,則結果為true(因為包裝類Integer和基本資料型別int比較時,java會自動拆包裝為int,然後進行比較,實際上就變為兩個int變數的比較)

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

三:非new生成的Integer變數和new Integer()生成的變數比較時,結果為false。(因為非new生成的Integer變數指向的是java常量池中的物件,而new Integer()生成的變數指向堆中新建的物件,兩者在記憶體中的地址不同)

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

四:對於兩個非new生成的Integer物件,進行比較時,如果兩個變數的值在區間-128到127之間,則比較結果為true,如果兩個變數的值不在此區間,則比較結果為false(這是因為Integer的快取機制會對-128-127的數進行快取,若下次整型變數賦值為-128-127間則會直接從快取中取)

Integer i = 88;
Integer j = 88;
System.out.print(i == j); //true
  
Integer i 
= 128; Integer j = 128; System.out.print(i == j); //false