当我们使用 Integer val = xx
赋值的时候,我们会执行哪些逻辑?
对于 Integer var = 127;
可以通过javap xx.class
查看对应的字节码
0: bipush 127
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: astore_1
在store之前调用了 valueOf
方法,接着看这个方法
public static Integer valueOf(int i) {
// IntegerCache.low 默认 -128,可以通过系统参数指定
// IntegerCache.high 默认 127, 可以通过系统参数指定
// 在这个范围内的话,从cache中获取,保证在这个范围内使用的都是同一个实例
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
// 不在上诉范围的话范围一个新的实例
return new Integer(i);
}
解析完valueOf
方法,也能很容易理解下面三个输出的值
Integer var0 = 127;
Integer var1 = 127;
Integer var2 = 128;
Integer var3 = 128;
int var4 = 127;
System.out.println(var0 == var1); // true
System.out.println(var1 == var4); // true
System.out.println(var2 == var3); // false