//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类似。
(复习笔记整理,若有出入后续修缮)
原文:https://www.cnblogs.com/qq-361807535/p/12598264.html