zoukankan      html  css  js  c++  java
  • Integer引用类型注意事项

    在jdk5后,java提供了自动装箱与自动拆箱

    有如下程序代码:

    public class IntegerTest {
        public static void main(String[] args) {
            Integer a = 126;
            Integer as = 126;
            System.out.println(a == as);
    
            Integer b = 128;
            Integer bs = 128;
            System.out.println(b == bs);
    
    
    
        }
    
    
    
    }

    输出为:

     这是因为整形常量池的存在,查看Integer类源码发现:

     private static class IntegerCache {
            static final int low = -128;
            static final int high;
            static final Integer cache[];
    
            static {
                // high value may be configured by property
                int h = 127;
                String integerCacheHighPropValue =
                    sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
                if (integerCacheHighPropValue != null) {
                    try {
                        int i = parseInt(integerCacheHighPropValue);
                        i = Math.max(i, 127);
                        // Maximum array size is Integer.MAX_VALUE
                        h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                    } catch( NumberFormatException nfe) {
                        // If the property cannot be parsed into an int, ignore it.
                    }
                }
                high = h;
    
                cache = new Integer[(high - low) + 1];
                int j = low;
                for(int k = 0; k < cache.length; k++)
                    cache[k] = new Integer(j++);
    
                // range [-128, 127] must be interned (JLS7 5.1.7)
                assert IntegerCache.high >= 127;
            }
    
            private IntegerCache() {}
        }

    含有一个cache,它将存储-128~127的常量,也就是说,a和as其实存的地址时相同的。但这种只适用于自动装箱,如果改成以下形式就不行了:

     Integer a = new Integer(126);
            Integer as = new Integer(126);
            System.out.println(a == as);

    将会输出:false

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/xuhan74520/p/13889111.html
Copyright © 2011-2022 走看看