2019独角兽企业重金招聘Python工程师标准>>>
Integer a = 100;Integer b = 100;Integer c = 200;Integer d = 200;System.out.println(a == b); //trueSystem.out.println(c == d); //false
Integer是对象,==比较的是对象在内存中的物理地址,但是Integer有个缓存的概念,符合规范的Java实现必须保证Integer的缓存至少要覆盖[-128, 127]的范围,查看源码:
public static Integer valueOf(int i) {final int offset = 128;if (i >= -128 && i <= 127) { // must cache return IntegerCache.cache[i + offset];}return new Integer(i);}
在这个scope之内的所有是相同的,超过这个scope就是从heap上重新new一个所以是不相同的这个缓存在VM启动时是可以配置的