Java中Integer和int的使用及注意点
更新时间:2025年01月03日 09:49:01 作者:心流时间
文章主要介绍了Java中Integer和Long类的缓存机制以及它们的比较方式,Integer和Long类在-128到127之间的值会被缓存,因此在这个范围内的值比较时可以使用==运算符,而超出这个范围的值则需要使用equals()方法进行比较
1. Integer缓存了-128到127之间的值
不在这个范围,比较值时需要用equals()方法
- 在这个范围内,Integer.value(int i) 将返回相同的对象实例。
- 超出这个范围,每次调用都会创建新的Integer对象。
- Long也是。
public static void main(String[] args) { // Integer和Long都是缓存在-128~127之间,所以可以直接比较,不用equals Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2); System.out.println(i1.equals(i2)); System.out.println("====="); Integer i3 = 128; Integer i4 = 128; System.out.println(i3 == i4); System.out.println(i3.equals(i4)); System.out.println("====="); Long ii1 = 127L; Long ii2 = 127L; Long ii3 = 128L; Long ii4 = 128L; System.out.println(ii1 == ii2); System.out.println(ii3 == ii4); System.out.println(ii1.equals(ii2)); System.out.println(ii3.equals(ii4)); }
- 打印:
true
true
=====
false
true
=====
true
false
true
true
Integer的equals方法源码
private final int value; public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
结论:
- 通过equals()源码可以看到它是比较的Integer中具体的值,
- 所以我们如果是比较对象或者比较-128~127的值可以用==,
- 而如果比较其他的值就需要用equals()了
2. 由于int类型是基本数据类型,Integer拆箱时不能为空
- 例1:
public static void main(String[] args) { // 由于int类型是基本数据类型,拆箱时不能为空 // 例1 Integer i5 = null; System.out.println(i5 == 3); }
报错:
- 例2:
public static void main(String[] args) { // 由于int类型是基本数据类型,拆箱时不能为空 // 例2 Integer i5 = null; test1(i5); } public static void test1(int i) { System.out.println(i); }
结论:
- 除了缓存导致比对值可能出现问题之外,
- 我们熟知的Integer是包装类,可以为null,int是基本数据类型,不可以为null,
- 在这一点上别忘了包装类拆箱时不能为null的问题。
- 所有包装类拆箱成基本数据类型时都存在此问题。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
一篇文章带你入门Springboot整合微信登录与微信支付(附源码)
微信支付是腾讯公司的支付业务品牌,微信支付商户平台支持线下场所、公众号、小程序、PC网站、APP、企业微信等经营场景快速接入微信支付。这里一篇文章带你入门!2021-06-06SpringBoot中@ConfigurationProperties实现配置自动绑定的方法
本文主要介绍了SpringBoot中@ConfigurationProperties实现配置自动绑定的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-02-02java fastjson传输long数据却接收到了int的问题
这篇文章主要介绍了java fastjson传输long数据却接收到了int的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01java实现附件预览(openoffice+swftools+flexpaper)实例
本篇文章主要介绍了java实现附件预览(openoffice+swftools+flexpaper)实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2016-10-10
最新评论