声明了Integer类型的两个数值并且值相等,但为什么返回了false?

简介: 声明了Integer类型的两个数值并且值相等,但为什么返回了false?

今天在写代码的时候发现了一个特别奇怪的问题

Integer id = 131;
// 传递过来的一个值 parentId 类型为Interger 也等于 131
System.out.printIn(id == parentId)  
值竟然等于 false?!!!

抱着不相信自己代码Integer的类型写错的心态。

仔细打了几遍断点发现,确实进不去。

也查看了各种类型的声明dto发现也都是正确的。

那么这是为什么呢?

查阅相关文档才发现。

原来Integer有个装箱跟拆箱的操作。
当数值范围大于[-128,127],比如a= 12,b = 12的时候
这时候 a==b 的值就是true。
可是当a = 131. b = 131 的时候,这时候的值则是false。

因为超出范围,Integer会去重新new一个对象。比对的则不是值

比对的是引用地址。

所以才会出现等于false的情况。

```java
这种时候,建议从一开始使用equals()来进行比较。


目录
打赏
0
0
0
0
44
分享
相关文章
怎样在函数中返回多个值?
怎样在函数中返回多个值?
111 52
|
4月前
|
布尔类型的值和类型
布尔类型的值和类型。
44 0
添加两个值
【4月更文挑战第29天】
48 4
添加多个值
【4月更文挑战第29天】
39 2
|
10月前
59.已知xxz+yzz=532,求所有可能的x,y,z的值
59.已知xxz+yzz=532,求所有可能的x,y,z的值
58 0
🎖️typeScrpt中如何返回正确的类型?
条件返回类型确实是 TypeScript 中非常有用的强大功能,它允许您根据参数的类型为函数指定不同的返回类型,从而实现更强的类型安全性。
95 0
判断Object中数据类型(已知类型、未知类型))
判断Object中数据类型(已知类型、未知类型))
153 0
使用C++模板判断两个类型是否一样
使用C++模板判断两个类型是否一样
149 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等