Integer缓存机制

缓存机制:缓存了从 -128 到 127 内的所有 Long 值,如果是这个范围内的 Long 值,就不会初始化,而是从缓存中拿。
源码如下

private static class LongCache {
        private LongCache(){}
        //数组存储值
        static final Long cache[] = new Long[-(-128) + 127 + 1];
        //将-128~127值存储到cache中
        static {
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Long(i - 128);
        }
    }
//结论:new出来的对象肯定是不相等的,
//不是new(看范围:如果在指定范围则相等,如果不在指定范围不相等)

Integer a=new integer(1);
Integer b=new integer(1);
System.out.println(a==b);//false 两个对象地址不相等

Integer c=1;
Integer d=1;
System.out.println(c==d);
//true 如果没有超出缓存范围,你可以将它理解为两个值,所有他们相等,
//如果他们超过缓存范围,如下面的例子,Integer e=130->
//Integer e= new Integer(130) e属于一个对象,f超出范围,
//所有f属于另一个对象。所以e!=f

Integer e=130;
Integer f=130;
System.out.println(e==f);

扩充自动拆箱和自动装箱

  • 自动拆箱:将引用数据类型转换为基本数据类型
  • 自动装箱:将基本数据类型装换为引用数据类型(对象)

理解代码如下

Integer a=1;//这就是自动装箱:Integer a=new integer(1);(但他并没有new:我现在的理解认知)

int b=a-1;//虽然a在上面时对象,但是由于自动拆箱,对象a将会变为基本数据值(1),
System.out.println(a);//1
System.out.println(b);//0

你可能感兴趣的:(笔记,java)