Integer i1=3;
Integer i2=3;
System.out.println(i1==i2);

Integer i3=300;
Integer i4=300;
System.out.println(i3==i4); 
输出结果是true
          false请高手们帮我解答一下,我很困惑。

解决方案 »

  1.   

    java 为了速度对-128到127之间的数的自动拆装箱做了特殊处理。
      

  2.   

    你定义成int就行了塞 你又不创建对象 用interger干嘛
      

  3.   

    而且你这么比较应该用equals()方法塞
      

  4.   

    jvm对代码的一些优化 
    ...... 说不定哪个版本又变化了
      

  5.   

    Integer是类,不是基本数据类型,比较的时候是对象的比较,但是java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);在jdk源码中
    Java代码public static Integer valueOf(int i) { 
        final int offset = 128; 
        if (i >= -128 && i <= 127) {
            return IntegerCache.cache[i + offset]; 
        } 
        return new Integer(i); 

    private static class IntegerCache { 
        private IntegerCache(){} 
        static final Integer cache[] = new Integer[-(-128) + 127 + 1]; 
        static { 
            for(int i = 0; i < cache.length; i++) 
                cache = new Integer(i - 128); 
        } 
    } 就是Integer 建立了一个Integer 缓存对象数组cache[],对应-127-128 之间的每个值。由于Integer 是不可变类,因此这些缓存的Integer 对象可以安全的重复使用。
    Integer i = XXX ,就是Integer i = Interger.valueOf(XXX), 首先判断XXX 是否在-127-127 之间,如果是直接return 已经存在的对象,否则就只能new 一个了,即在堆中另开辟一块内存,所以就返回false。