Java Integer(-128~127)值的==和equals比较
Integer
有如下代码:
1 | Integer i1 = 127; |
输出结果如下:
1 | 127 == 127 :true 127.equals(127) :true |
总结:
- 在-128~127的Integer值如果以
Integer x = value;的方式赋值的Integer值在进行==和equals比较时,都会返回true- 在-128~127之外的以
Integer x = value;的方式赋值的Integer值在进行==和equals比较时,返回结果并不下相同- 无论是在-128~127还是之外的Integer值如果以
Integer x = new Integer(value);的方式赋值的Integer值在进行==和equals比较时,返回结果都并不x相同- 因为Java里面对处在在-128
127之间的使用127的范围,进行==比较时是进行地址及数值比较。Integer x = value;赋值的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128- 而对于所有以
Integer x = new Integer(value);赋值的Integer值,使用== 比较时是进行地址及数值比较。- 语句 i9 == i10 + i11,因为+这个操作符不适用于 Integer 对象,首先 i10 和 i11 进行自动拆箱操作,进行数值相加,即 i9 == 40。然后 Integer 对象无法与数值进行直接比较,所以 i9 自动拆箱转为 int 值 40,最终这条语句转为 40 == 40 进行数值比较
- 所以在比较包装类型的值时,必须使用equals进行比较