问题:

今天线上反馈了一个我之前写的功能的问题,是一个树形结构展示不全数据的问题,但是这棵树一半有一半没有,就很奇怪,然后开始debug:
image.png
查看debug后,发现这里有问题,看数字是一摸一样的,但是就是不进if条件里,就很奇怪
然后分析是不是因为数据类型的原因:
image.png
看了一下好像也没啥问题,百思不得其解,然后百度:
image.png
恍然大悟,范围在-128~127之间比较,相当于地址相同内容相同,所以会返回true
在这个范围外的,新创建了对象,相当于地址不同内容相同,所以会返回false

修改方案:

既然都是比较对象,那么直接用equals比较:
image.png

总结:

如果你用两个Integer类型的整数做相等比较:
1.如果Integer类型的两个数相等,如果范围在-128~127(默认),那么用“==”返回true,其余的返回false。
2.两个基本类型int进行相等比较,直接用==即可。
3.一个基本类型int和一个包装类型Integer比较,用==也可,比较时候,Integer类型做了拆箱操作。
4.Integer类型比较大小,要么调用Integer.intValue()转为基本类型用“==”比较,要么直接用equals比较。