Integer 與int 賦值比較


測試代碼:

 @Test
    public void IntegerTest() {
        Integer i01 = 59;
        int i02 = 59;
        Integer i03 = Integer.valueOf(59);
        Integer i04 = new Integer(59);
        System.out.println(i01==i02);
        System.out.println(i01==i03);
        System.out.println(i03==i04);
        System.out.println(i02==i04);
    }

運行結果:

true
true
false
true

斷點調試分析結果:

i01是引用類型,如圖引用的地址為Integer@651

i02是值類型

i03是引用類型,因為引用類型值放在堆里面,如果堆里有值,i03這種取值方式就直接引用原有值的地址Integer@651

i04是引用類型,但是i04是new創建新對象,要在堆里新開空間存放值,也就會有新地址Integer@652

i01與i02比較,引用類型和值類型用等號比較,比較的是值(引用類型自動拆箱為int),故返回true;

i01與i03比較,引用類型和引用類型用等號比較,比較的是地址,兩個地址一樣,故返回true;

i03與i04比較,引用類型和引用類型用等號比較,比較的是地址,兩個地址不同,故返回false;

i02與i04比較,值類型與引用類型用等號比較,比較的是值(引用類型自動拆箱為int),故返回true;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM