Integer的128陷阱
引言
对于变量a,a1
Integer a=128;
Integer a1=128;
a==a1;
结果为
false
而对于变量b,b1
Integer b=1;
Integer b1=1;
b==b1;
结果为
true
原因分析
这是由于Integer a=128在赋值时,实际上执行的是
Integer a=Integer.valueOf(128)
操作
查看valueOf方法时发现,如果数值不在Cache数组的[low,high]之间,那么就会重新new一个对象

而在IntegerCache的定义中,这一范围为-128~127

这意味着当数据范围超出-128~127时,就已经是两个对象了

浙公网安备 33010602011771号