今天在写代码的时候发现了一个特别奇怪的问题
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()来进行比较。