最近接手一个项目,逻辑写的好好的,但是一直没有得到想要的结果,最后才发现原来是代码中有个条件语句,判断的时候,通过equal去比较 两个AtomicInteger 值是否相等。
先看一段代码:
public static void main(String[] args) {
Integer integer1 = new Integer(1);
Integer integer2 = new Integer(1);
AtomicInteger atomicInteger1 = new AtomicInteger(1);
AtomicInteger atomicInteger2 = new AtomicInteger(1);
System.out.println(integer1.equals(integer2));//true
System.out.println(atomicInteger1.equals(atomicInteger2));//false
}
我们知道当比较Integer的时候,会用equal,Integer重写了Object的equal和hashCode方法;
而AtomicInteger没有重写equals()方法,当使用equals()时,实际上使用的是Object的equals()方法,最终判断的是对象的地址是否相等。
正确写法: 通过get()方法,将AtomicInteger转为int 直接用 == 去判断
System.out.println(atomicInteger1.get() == atomicInteger2.get());//false