Java和Python中关于Integer对象的缓存情况
首先看结论,java中[-128,127]闭区间内的数字会被放在Integer对象池中
看代码
public class Test { public static void main(String[] args) { Integer a = 3; Integer b = 3; Integer c = 129; Integer d = 129; System.out.println(a==b); System.out.println(c==d); } }
运行结果
true
false
其实 Java中的基本数据类型对应的包装类都具有自己的cache机制 Integer对应的IntegerCache, Double对应DoubleCache 以此类推
cache支持的最大范围也可以通过jdk启动参数来进行配置,比如IntegerCache的最大127,即可以通过-XX:AutoBoxCacheMax=256 来改成256 或者其他适合的数。
python中同样也有类似的小整型池的技术,对于python2.5以后的版本 是会缓存[-5,257) 左开右闭之间的整型,以减少malloc/free的系统调用
看代码
a = 3 b = 3 print a is b c = 257 d = 257 print c is d
运行结果
True
False
False