Java Integer和int的區(qū)別

int 是基礎(chǔ)類型,Integer是引用類型,是int的包裝類型。
int使用的是值傳遞。Integer使用的是引用傳遞。

java的基礎(chǔ)類型都有對應(yīng)的包裝類型。

因為int是基礎(chǔ)類型,所以int是分配在常量區(qū)。Integer是引用類型,所以它是分配在堆里面的。

類裝載的時候,在類加載階段。會將int類型的變量賦值為0 ,如果初始化階段沒有賦值的話,那么int類型的變量的初始值就是0 。 對于對象類型,在類加載階段,會賦值為null, 所以在初始化階段如果沒有指定值的話,那么Integer類型的變量初始的值就是null。

使用int類型有3種方式

//直接聲明變量賦值。
int i = 1;  

//這里由于自動裝箱拆箱,所以可以直接將值賦值給對象。
//這里編譯過后會變成 Integer i1 = Integer.valueOf(1);
Integer  i1 = 1; 

//使用new創(chuàng)建對象。
Integer i2 = new Integer(1);

int和Integer的對比如下



    public static void main(String[] args) {

        int i1= 1;
        Integer i2 = 1;
        Integer i3 = new Integer(1);


        //true 因為i2會被自己拆箱成1
        System.out.println( i1 == i2);

        //true 因為i3會被自己拆箱成1
        System.out.println( i1 == i3);

        //false 因為Integer會自動在類加載的時候,自動生成一個Integer數(shù)組,保存著 -128 ~ 127 的對象
        //i2 會被編譯成 i2= Integer.valueOf(1); valueOf方法會去獲取預(yù)先緩存的 -128 ~ 127 對象。
        // 所以這里判斷的是 i2(這個在加載階段就創(chuàng)建的Integer對象) 和 i3(在執(zhí)行階段才創(chuàng)建的對象) 是否同一個對象,當(dāng)然不是同一個對象。
        System.out.println( i2 == i3);


        Integer i4 = 2;
        Integer i5 = 2;

        //true 因為i4 和 i5 都是Integer類緩存的對象。
        System.out.println(i4 == i5);


        Integer i6 = 128;
        Integer i7 = 128;

        //false ,因為i6 和 i7都大于127。所以是new出來的對象,而不是緩存的對象。
        System.out.println(i6 == i7 );


        Integer i8 = new Integer(3);
        Integer i9 = new Integer(3);
        //false i8 和 i9都是new出來的對象,是不同的引用。所以是false
        System.out.println(i6 == i7 );

        //true  equals方法是獲取int值進行對比。 他們的值都是3 所以是true
        System.out.println(i8.equals(i9));


    }

需要增加的理解: 自動裝箱和拆箱

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容