关于integer:缓存池

new Integer(123) 与 Integer.valueOf(123) 的区别在于: new Integer(123) 每次都会新建一个对象;Integer.valueOf(123) 会应用缓存池中的对象,屡次调用会获得同一个对象的援用。Integer a = 123;Integer b = new Integer(123);Integer c = Integer.valueOf(123);System.out.println(a==b);System.out.println(a==c); 编译器会在主动装箱过程调用 valueOf() 办法,因而多个值雷同且值在缓存池范畴内的 Integer 实例应用主动装箱来创立,那么就会援用雷同的对象。 valueOf() 办法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就间接返回缓存池的内容。 public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i);}根本类型对应的缓冲池如下: boolean values true and falseall byte valuesshort values between -128 and 127int values between -128 and 127char in the range u0000 to u007F在应用这些根本类型对应的包装类型时,如果该数值范畴在缓冲池范畴内,就能够间接应用缓冲池中的对象。 ...

October 4, 2020 · 1 min · jiezi