Integer a = 1000, b = 1000; a==b 一定是false吗

在讲解之前我们先来看一段代码:

Integer a = 1000, b = 1000;
Integer c = 100, d = 100;
System.out.println(a==b);
System.out.println(c==d);

相信大家都知道此时依次顺序输出为:false,true
那一定是这样的吗?

Integer a = 1000实际内部是调用Integer.valueOf(1000)方法,看下源码:


image.png

可以看出在i >= IntegerCache.low && i <= IntegerCache.high 时,会从IntegerCache.cache缓存里面拿,否则直接new Integer
看下IntegerCache内部实现:


image.png

从上面可以看出,low的默认值为-128,high的取值取决与integerCacheHighPropValue :
String integerCacheHighPropValue =
                VM.getSavedProperty("java.lang.Integer.IntegerCache.high");

当我们未对jvm中的IntegerCache进行设置时,high默认值为:127,cache的数据也就是从-128到127。也就能理解为什么上面a==b为false,c==d为true。
接下来我们改一下jvm中的参数:


image.png
-XX:AutoBoxCacheMax=1024

这时候再运行,发现a==b也是等true。

你可能感兴趣的:(Integer a = 1000, b = 1000; a==b 一定是false吗)