public class Test {
    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));
    }
}

解决方案 »

  1.   

    输出结果:
    a.true
    b.false
    c.true
    d.false
      

  2.   

    Integer and Character 在 一定 范围内是cache的,好像是-128,127 , 所以100 跟200结果会不一样
      

  3.   

    看Integer,Character的valueOf方法的源码
      

  4.   

    这个是java的享元设计模式,就拿Integer类型来说,如果你定义了Integer i = (一字节内的数字),那么java会认为这个数字式个常用的数字,就把它放在类似一个对象池中,这样你再定义同样的一个Integer时,就不会再重新开辟空间。