为什么声明相等的Integer数值却返回了false?

2026-05-27 20:060阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计311个文字,预计阅读时间需要2分钟。

为什么声明相等的Integer数值却返回了false?

今天在写代码的时候发现了一个奇怪的问题:Integer id=131; // 传递过来的一个值 parentId 类型为 Integer 也等于 131; System.out.println(id==parentId) 值竟然为 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()来进行比较。


本文共计311个文字,预计阅读时间需要2分钟。

为什么声明相等的Integer数值却返回了false?

今天在写代码的时候发现了一个奇怪的问题:Integer id=131; // 传递过来的一个值 parentId 类型为 Integer 也等于 131; System.out.println(id==parentId) 值竟然为 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()来进行比较。