http://blog.csdn.net/ying_24ying/article/details/7068174
貌似可以说明一些问题
概念上的事情我也不清除

解决方案 »

  1.   

    这个问题我也纠结很久。但我的猜想是当对象与基本数据类型进行比较的时候,应该是将Integer转换为int类型之后再进行比较。
    也符合数据类型一一致的要求。
    这也是我个人觉得,仅供参考。
      

  2.   

    Integer和栈中基本类型int逻辑运算的时候会自动转型,转int类型,两个Integer==Integer就不会相等了。
      

  3.   

    Integer的数据,为了和int数据进行比较,进行了拆包,所以才是true。
    如果一个基本数据类型要跟对象进行比较,结果只能是编译出错。
      

  4.   

    楼主可以去了解一下 java 拆包的理论知识。。
      

  5.   

    integer自动将-128~127只将的整数转为int类型
      

  6.   

    你用 128试就不是 true 了,#7 楼正解~
      

  7.   

    JDK5中的新功能吧,自动装箱,自动拆箱!
      

  8.   

    通过断点可以发现 Integer的intValue方法被调用
    证明Integer对象拆箱成int型与数字比较=========================================================
    -128~127的Integer不是自动拆成int型
    看源码就知道Integer 里面有个叫 IntegerCache的类
    缓存了-128~127的Integer对象,自动装包时调用Integer.valueOf(int i)
    所以指向的Integer是一样的,所以 == 才会true
    手动 new Integer(i) 就会做成不等了
      

  9.   

    Integer的数据,为了和int数据进行比较,进行了拆包,所以才是true。
    如果一个基本数据类型要跟对象进行比较,结果只能是编译出错。
      

  10.   

    通过断点可以发现 Integer的intValue方法被调用
    证明Integer对象拆箱成int型与数字比较=========================================================
    -128~127的Integer不是自动拆成int型
    看源码就知道Integer 里面有个叫 IntegerCache的类
    缓存了-128~127的Integer对象,自动装包时调用Integer.valueOf(int i)
    所以指向的Integer是一样的,所以 == 才会true
    手动 new Integer(i) 就会做成不等了
    手动 new Integer(i) 就会做成不等了???不太明白,能给段事例代码么,谢谢
      

  11.   

    说白了就是所谓的自动装箱和自动拆箱的问题了。因为e 和 f 类型不一样。System.out.println(new Integer(1)==new Integer(1));的结果就是false。俩对象,没有重载“==”,肯定不一样了。
      

  12.   

    通过断点可以发现 Integer的intValue方法被调用
    证明Integer对象拆箱成int型与数字比较=========================================================
    -128~127的Integer不是自动拆成int型
    看源码就知道Integer 里面有个叫 IntegerCache的类
    缓存了-128~127的Integer对象,自动装包时调用Integer.valueOf(int i)
    所以指向的Integer是一样的,所以 == 才会true
    手动 new Integer(i) 就会做成不等了
    手动 new Integer(i) 就会做成不等了???不太明白,能给段事例代码么,谢谢 Integer a = 121;
    Integer b = 121;
    Integer c = new Integer(121);

    System.out.println(a == b);
    System.out.println(a == c);
    int   d = 121;
    Float e = 121.0f;
    System.out.println(d == e);