基本資料類型和引用類型
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生成的是兩個對象,其記憶體位址不同)。
2、Integer變量和int變量比較時,隻要兩個變量的值是向等的,則結果為true(因為包裝類Integer和基本資料類型int比較時,java會自動拆包裝為int,然後進行比較,實際上就變為兩個int變量的比較)
3、非new生成的Integer變量和new Integer()生成的變量比較時,結果為false。(因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中建立的對象,兩者在記憶體中的位址不同)
4、對于兩個非new生成的Integer對象,進行比較時,如果兩個變量的值在區間-128到127之間,則比較結果為true,如果兩個變量的值不在此區間,則比較結果為
不在-128-127之間:
對于第4條的原因:
java在編譯Integer i = 100 ;時,會翻譯成為
Integer i = Integer.valueOf(100);,而java API中對Integer類型的valueOf的定義如下:
java對于-128到127之間的數,會進行緩存,Integer i = 127時,會将127進行緩存,下次再寫Integer j = 127時,就會直接從緩存中取,就不會new了。