//Integer范围-128~127
        //Integer与Integer比较
        Integer a_127 = 127;
        Integer b_127 = 127;
        Integer c_new_127 = new Integer(127);
        //编译a_127=127时,被翻译成Integer a_127=Integer.valueOf(127)
        //而在valueOf()的源码中,对于-128~127之间的数,会进行缓存,即Integer a_127=127时,会将127进行缓存,下次再写Integer b_127=127时,则会直接从缓存中取,就不会new了
        //所以a_127==b_127结果为true,而a_128==b_128结果为false
        System.out.println(a_127 == b_127);//true
        //因为c_new_127新建了一个对象,所以这里两个对象相比较,当然不一样
        System.out.println(a_127 == c_new_127);//注意:false
        Integer a_128 = 128;
        Integer b_128 = 128;
        System.out.println(a_128 == b_128);//注意:false
        Integer a_new_128 = new Integer(128);
        Integer b_new_128 = new Integer(128);
        //两个new出来的对象进行比较,一定为false
        System.out.println(a_new_128 == b_new_128);//注意:false
        System.out.println(a_128 == a_new_128);//注意:false
        //int与int比较
        int i_127 = 127;
        int n_127 = 127;
        System.out.println(i_127 == n_127);//true
        int i_128 = 128;
        int n_128 = 128;
        System.out.println(i_128 == n_128);//true
        //Integer与int比较
        //Integer与int比较时,Integer会自动拆箱为int
        System.out.println(a_127 == i_127);//true
        System.out.println(c_new_127 == i_127);//true
        System.out.println(a_128 == i_128);//注意:true
        System.out.println(a_new_128 == i_128);//注意:true

Integer.valueOf()的源码如下:

1     //IntegerCache.low=-128;IntegerCache.high=127
2     public static Integer valueOf(int i) {
3         if (i >= IntegerCache.low && i <= IntegerCache.high)
4             return IntegerCache.cache[i + (-IntegerCache.low)];
5         return new Integer(i);
6     }
View Code

相关文章: