声明了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()来进行比较。


目录
相关文章
|
1月前
|
Java 开发者
使用HashMap的values()方法返回的值转换为List时遇到错误
使用HashMap的values()方法返回的值转换为List时遇到错误
|
7月前
|
SQL
根据一个类型 获取该类型的 特殊判断 优雅写法
根据一个类型 获取该类型的 特殊判断 优雅写法
|
10月前
|
前端开发
根据数组code值返回value值
根据数组code值返回value值
52 0
|
11月前
int 类型和double类型数值转换
int 类型和double类型数值转换
|
关系型数据库 MySQL
NULL 值处理
NULL 值处理
判断Object中数据类型(已知类型、未知类型))
判断Object中数据类型(已知类型、未知类型))
118 0
|
C++
使用C++模板判断两个类型是否一样
使用C++模板判断两个类型是否一样
115 0
类型和值
类型和值
56 0
|
JavaScript 前端开发
使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
121 0
使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
|
容器
C++11中的tuple应用:让函数返回多个值
在没有tuple之前,如果函数需要返回多个值,则必须定义一个结构体,有了C++11,可以基于tuple直接做了,下面是个示例:点击(此处)折叠或打开 // 编译:g++ -std=c++11 -g -o x x.
967 0