Java中Integer类型变量相等比较需谨慎

在写一道LeetCode时遇到需要对两个Integer变量进行 == 比较,发现逻辑没有问题,两个Integer值为10000时if判断就是不为true,当时就觉得很离谱,明明就相等,就是不执行后面的递减,导致结果错误。

最后去网上搜了发现,令人震惊!
1.如果Integer类型的两个数相等,范围在-128~127(默认),那么用“==”返回true,其余的范会false。

2.两个基本类型int进行相等比较,直接用==即可。

3.一个基本类型int和一个包装类型Integer比较,用==也可,比较时候,Integer类型做了拆箱操作。

4.Integer类型比较大小,要么调用Integer.intValue()转为基本类型用“==”比较,要么直接用.equals()比较。

5.Java Integer.compareTo()比较大小.

因Integer存在缓存,在Integer的值不超过-128~127之间 == 对比为true,若超过则会new一个Integer对象 == 结果为false;对象之间的比较不能用 == ,包括数字包装类,Integer,Long,Short,Character,Byte,都存在缓存机制,数字大于对应的缓存池就会new一个对象,就不能用 == 了,若小于缓存池,则包装类不会创建新的对象.

猜你喜欢

转载自blog.csdn.net/qq_43570515/article/details/132189178