声明了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月前
|
Python
怎样在函数中返回多个值?
怎样在函数中返回多个值?
|
JavaScript
🎖️typeScrpt中如何返回正确的类型?
条件返回类型确实是 TypeScript 中非常有用的强大功能,它允许您根据参数的类型为函数指定不同的返回类型,从而实现更强的类型安全性。
87 0
|
JSON JavaScript 前端开发
一个由服务端返回的long值改变引发的血案
一个由服务端返回的long值改变引发的血案
65 0
|
存储 JavaScript 前端开发
【JS交互埋坑】事件函数自动将数字字符串String转为数值Number
【JS交互埋坑】事件函数自动将数字字符串String转为数值Number
86 0
|
前端开发
根据数组code值返回value值
根据数组code值返回value值
81 0
|
关系型数据库 MySQL
NULL 值处理
NULL 值处理
判断Object中数据类型(已知类型、未知类型))
判断Object中数据类型(已知类型、未知类型))
146 0
|
C++
使用C++模板判断两个类型是否一样
使用C++模板判断两个类型是否一样
142 0
类型和值
类型和值
76 0
|
容器
C++11中的tuple应用:让函数返回多个值
在没有tuple之前,如果函数需要返回多个值,则必须定义一个结构体,有了C++11,可以基于tuple直接做了,下面是个示例:点击(此处)折叠或打开 // 编译:g++ -std=c++11 -g -o x x.
1008 0