开发者社区 问答 正文

Integer的127与128:报错

代码:

Integer a1 = 127;
Integer b1 = 127;
if(a1==b1){
	System.out.println("相等");
}else{
	System.out.println("不等");
}

Integer a = 128;
Integer b = 128;
if(a==b){
	System.out.println("相等");
}else{
	System.out.println("不等");
}
运行结果是:

相等
不等

测试了下,两个Integer大于或等于128时是不等的。

这是怎么回事?

展开
收起
kun坤 2020-06-14 09:53:19 828 分享 版权
阿里云 AI 助理回答

这个现象是由于Java中的Integer类的缓存机制导致的。在Java中,为了提高性能和减少对象创建的开销,Integer类维护了一个内部缓存池(-128到127之间的值),对于这个范围内的整数,Integer.valueOf(int)方法会直接从缓存池中返回已经存在的Integer对象,而不是每次调用都新建一个对象。

在你的代码中:

  1. 对于Integer a1 = 127;Integer b1 = 127;,因为127在缓存范围内,a1b1指向的是同一个缓存中的Integer对象,所以a1==b1比较的是两个对象引用是否相同,结果为真,输出“相等”。

  2. 而对于Integer a = 128;Integer b = 128;,因为128超出了缓存范围,每次通过new Integer(128)或者直接赋值都会创建一个新的Integer对象。因此,即使ab的值相同,它们也是两个不同的对象,在内存中有不同的地址,所以a==b比较的是对象引用,结果为假,输出“不等”。

注意,这里使用的是==操作符,它比较的是对象的引用是否相同,而不是对象的内容(即值)是否相等。如果你想比较两个Integer对象的值是否相等,应该使用.equals()方法,如a.equals(b),这将比较它们所封装的int值是否相等。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: