J對avaSE_多線程入門 線程安全 死鎖 狀態 通訊 線程池進行簡要總結和介紹 ...
轉自:
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