天天看點

double除以int結果是int嗎_Java面試官:請說出int和Integer的差別

基本資料類型和引用類型

Java是面向對象的程式設計語言,一切都是對象,但是為了程式設計的友善還是引入了基本資料類型,為了能夠将這些基本資料類型當成對象操作,Java為每一個基本資料類型都引入了對應的包裝類型(wrapper class),int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得二者可以互相轉換,對應如下:

原始類型:boolean,char,byte,short,int,long,float,double

包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

Java中的基本資料類型隻有以上8個,除了基本類型(primitive type),剩下的都是引用類型(reference type)。

三種引用類型:

類class

接口interface

數組array

int和Integer的差別

1、Integer是int的包裝類,int則是java的一種基本資料類型

2、Integer變量必須執行個體化後才能使用,而int變量不需要

3、Integer實際是對象的引用,當new一個Integer時,實際上是生成一個指針指向此對象;而int則是直接存儲資料值

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

延伸:

關于Integer和int的比較

1、由于Integer變量實際上是對一個Integer對象的引用,是以兩個通過new生成的Integer變量永遠是不相等的(因為new生成的是兩個對象,其記憶體位址不同)。

double除以int結果是int嗎_Java面試官:請說出int和Integer的差別

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

double除以int結果是int嗎_Java面試官:請說出int和Integer的差別

3、非new生成的Integer變量和new Integer()生成的變量比較時,結果為false。(因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中建立的對象,兩者在記憶體中的位址不同)

double除以int結果是int嗎_Java面試官:請說出int和Integer的差別

4、對于兩個非new生成的Integer對象,進行比較時,如果兩個變量的值在區間-128到127之間,則比較結果為true,如果兩個變量的值不在此區間,則比較結果為

double除以int結果是int嗎_Java面試官:請說出int和Integer的差別

不在-128-127之間:

double除以int結果是int嗎_Java面試官:請說出int和Integer的差別

對于第4條的原因:

java在編譯Integer i = 100 ;時,會翻譯成為

Integer i = Integer.valueOf(100);,而java API中對Integer類型的valueOf的定義如下:

double除以int結果是int嗎_Java面試官:請說出int和Integer的差別

java對于-128到127之間的數,會進行緩存,Integer i = 127時,會将127進行緩存,下次再寫Integer j = 127時,就會直接從緩存中取,就不會new了。

繼續閱讀