今天看《java核心技术》,发现Integer a=1000;Integer b=1000;a==b返回false,但是如果Integer a=100;Integer b=100;a==b则返回true,书上的解释是:int在-128到127之间的会自动打包。怎么理解?自动打包a和b的引用相同了?请高人解释一下

解决方案 »

  1.   

    自动打包
    Integer a=100;
    非自动打包
    Integer a= new Integer(100);在自动打包时
    127~-128的数值在内存会供重用非自动打包则没这特性
      

  2.   

    自动拆箱装箱不是指这个,而是指Integer与int转换时不需要显式地调用intValue和valueOf这两个方法,而是会隐式地自动调用它们-128~127这些数的Integer对象被缓存起来,在调用valueOf方法时如果int值在这范围内,会从缓存读取而不是创建新对象,具体可以阅读源码
      

  3.   

    别管, 不规范的东西。
    反正不会这样判定的。
    int这样判定还行;Integer是对象。
      

  4.   

    你说的自动打包与拆包是不是就是指JDK1.5的新特性:自动装箱和拆箱?
    自动装箱是指一般情况下,要用:
    int i =100;
    Integer iobj = Integer.valueOf(i);
    才能封装成Integer对象。
    自动装箱可以直接得到Integer对象。
    Integer iobj =100;
    是否在-128到127之间的都会自动装箱,但在单字节范围内自动装箱时指向的是同一份字节码。回答不一定全面,希望对你有用,高手继续补充!
      

  5.   

    http://blog.csdn.net/yaoweijq/archive/2010/11/19/6021706.aspx
    可以看下我的文章
    专门研究了下拆箱,装箱