Java Integer及int装箱拆箱对比
示例代码:
class BoxIntInteger { public static void main(String[] args) { Integer a = new Integer(10111); int b = 10111; boolean equal1 = a == b; boolean equal2 = a.equals(b); System.out.println(equal1); System.out.println(equal2); }}
反编译字节码:
public static void main(String args[]){ Integer a = new Integer(10111); int b = 10111; boolean equal1 = a.intValue() == b; boolean equal2 = a.equals(Integer.valueOf(b)); System.out.println(equal1); System.out.println(equal2); }
1:可以看出对于Integer与int使用==比较大小的话,优先Integer拆箱。
2: 如果使用equals比较大小的话,则int装箱。
提示:对于Integer与int之间大小比较优先使用equals比较,否则容易出现空指针,例如:
Integer c= null;System.out.println(c==1);
原因:由于Integer需要调用intValue进行拆箱,因而空指针。
Integer与Integer必须使用equals方法比较,这个就不必解释了。但是通常我们可以看先Integer与Integer之间使用==也可以正确比较,原因是:Integer对于-128到127之间的数字在缓存中拿,不是创建新对象。
缓存获取数据源码:java.lang.Integer#valueOf(int)
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i);}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好吧啦网。
相关文章:
1. SharePoint Server 2019新特性介绍2. 无线标记语言(WML)基础之WMLScript 基础第1/2页3. 解决ASP中http状态跳转返回错误页的问题4. ASP中常用的22个FSO文件操作函数整理5. asp的SQL语句中and和or同时使用的注意事项6. html清除浮动的6种方法示例7. ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程解析8. .Net core 的热插拔机制的深入探索及卸载问题求救指南9. React+umi+typeScript创建项目的过程10. Vue+elementUI下拉框自定义颜色选择器方式
