当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-10-26
今天在写代码的时候发现了一个特别奇怪的问题 Integer id = 131 ; // 传递过来的一个值 parentId 类型为Interger 也等于 131 System . out . printIn ( id == parentId ) 值竟然等于 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()来进行比较。


网友评论