今天在写代码的时候发现了一个特别奇怪的问题 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的情况。
这种时候,建议从一开始使用equals()来进行比较。