前两天工作把代码合并到主分支时,被公司的安全监测机制拦截了,一看是因为用了==
来比较Integer
类型。
在阿里开发手册中,有这样一条:在包装类进行比较的时候,要用equals
方法,而不是==
。 具体的原因下面也讲解的很清楚,就是因为对象会复用,导致比较结果出错。
下面看一下示例。==
只有在基本数据类型的比较上,是直接比较值,否则比较的是两个对象的地址。
- 127在[-128,127]区间内,在IntegerCache.cache上产生,可以被复用,因此x和y是一个对象,地址相同,返回true。
- 128不属于此区间,不会被复用,因此a和b是两个对象,地址不同,返回false。
- 另外,其实也可以看到IDEA有提醒我们,用
equals
替换掉==