Java基础-Long简析

  • Long 是long类型的包装类型。
  • Long默认零值为null, long的默认零值为 0.
  • Long类中有个静态的内部缓存类,用来缓存 -128 ~ 127 之间的long包装对象实例,类加载的过程中会对LongCache的静态代码块进行初始化,后面自动装箱的 -128 ~ 127 之间的Long会直接返回缓存数组里面的对象引用。Long i = 125; 会直接指向静态常量池里面的值。
//1. Long的内部类,当Class字节码文件被加载的时候,会执行静态代码块,对cache数组进行初始化。
private static class LongCache {
        private LongCache(){}
        static final Long cache[] = new Long[-(-128) + 127 + 1];
        static {
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Long(i - 128);
        }
}
//2. 后面用Long.valueOf(Long l) 方法获取对应的Long对象的时候,或者直接用“=”给Long类型变量赋值的话,如果缓存数组有,则直接返回缓存数据里的对象引用。
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}

//3. 注:如果用 new Long(x) 创建出来的对象始终在堆内存中。

//4. 该特性,int的包装类型Integer类似。
  • Effective java中建议,在循环中不要使用包装类型,会进行频繁的装箱和拆箱动作,严重影响性能。
  • 注意,long 赋值的时候,需要给数字后面带“l”;

(复习笔记整理,若有出入后续修缮)

posted @ 2020-03-30 14:06  韧雪飞舞  阅读(2011)  评论(0编辑  收藏  举报