java Integer Long类型的比较

  • Post author:
  • Post category:java


今天有同事问我,两个Integer类型的数值进行比较的时候,为什么老是不相等,之前也接触过,只是记得不太清楚了,好像是包装类型缓存了一个字节的数值吧,然后直接让他换成compareTo进行比较,闲下来,自己又翻了下api,直接贴一下源码了

Integer和Long的包装类型,自己缓存了一个字节的数值,如果进行比较的时候,是调用其valueOf方法,返回对象进行比较,如果这个时候,数值正好在-128—127之间,那么返回的是缓存中的数值,这样进行比较能看到正常的效果,也就是我们用原子类型比较的结果,如果超过这个数值,则是new了一个对象出去,这个时候用==进行比较则是对象直接比较了,就会和预期的结果有差别。