package com.dhcc.yang;public class Test2 {
    public static void main(String[] args) {
        int k = 100;
        Integer int1 = k;
        Integer int2 = k;
        System.out.println("a." + (int1 == int2));
        k = 200;
        Integer int3 = k;
        Integer int4 = k;
        System.out.println("b." + (int3 == int4));
        char c = 'A';
        Character char1 = c;
        Character char2 = c;
        System.out.println("c." + (char1 == char2));
        c = '国';
        Character char3 = c;
        Character char4 = c;
        System.out.println("d." + (char3 == char4));
    }
}结果a.true
b.false
c.true
d.false

解决方案 »

  1.   

    Integer [-128, 127] 内是有优化的 是true
    这个范围外的是false
      

  2.   

    http://blog.csdn.net/yuanyuan110_l/article/details/2074597
      

  3.   

    lz要看一下Integer的源码就知道了
    Integer i=123; //等同于 Integer i=Integer.valueOf(100);
    下面是Integer.valueOf(int i)的源码public static Integer valueOf(int i) {
        final int offset = 128;
        if (i >= -128 && i <= 127) { // must cache 
            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[i] = new Integer(i - 128);
        }
        }知道为什么了吧,Integer建了一个256个Interger对象的缓存,值从-128~127,超出这个范围就要重新new了,类似的还有Long,Character,Short,Byte;Boolean只有俩,自然就不必说了