Integer緩存區的問題

我的個人網站:
http://riun.xyz/


緩存區的問題

//-128~127之間的值,都是直接從IntegerCache.cache緩存區拿。無論創建多少數值,只要在此範圍內,同一數值都是指向同一個緩存區的對象,所以使用 == 判斷時,必定返回true
        /*Integer i = 15;
        Integer j = 15;
        Integer k = 16;
        System.out.println(i==j);//true
        System.out.println(i==k);//false*/

        //-128~127之外的值,會直接在堆上創建新的對象,無論此數值是否已被創建。所以使用 == 判斷時,無論數值爲何,總是返回false
        /*Integer i = 155;
        Integer j = 155;
        Integer k = 166;
        System.out.println(i==j);//false
        System.out.println(i==k);//false*/

        //只要使用new進行創建,無論創建什麼,都是在堆上創建新的對象。所以使用 == 判斷時,無論數值是否相同,總是返回false
        /*Integer i = new Integer(15);
        Integer j = new Integer(15);
        Integer k = new Integer(16);
        System.out.println(i==j);//false
        System.out.println(i==k);//false*/

        //Integer.valueOf(15)和Integer i = 15是同一種方式,都是去緩存區拿已有的對象引用。對於不在-128~127範圍內的數值,會創建新的對象
        Integer i = Integer.valueOf(15);
        Integer j = Integer.valueOf(15);
        Integer k = Integer.valueOf(16);
        System.out.println(i==j);//true
        System.out.println(i==k);//false


        /*
        //valueOf源碼
        public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }
        */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章