Java 自动装箱和缓存机制:Integer 比较结果分析

以下代码展示了 Java 中 Integer 类型自动装箱和缓存机制对比较运算符 '==' 的影响:

public class Test02 {
    public static void main(String[] args) {
       Integer i1=127;
       Integer i2=127;

        System.out.println(i1==i2);

        Integer i3=128;
        Integer i4=128;
        System.out.println(i3==i4);
    }
}

输出结果为:

true
false

原因解释:

Java 在自动装箱时会对 -128 到 127 之间的整数进行缓存,即如果装箱的是这个范围内的整数,会直接从缓存中取出对应的 Integer 对象,而不是新创建一个对象。

  • 因此,i1i2 的值相同且在范围内,所以它们引用的是同一个对象,i1==i2 的结果为 true
  • i3i4 的值都不在缓存范围内,所以会分别创建两个不同的对象,i3==i4 的结果为 false

总结:

在使用 '==' 比较 Integer 对象时,需要注意自动装箱和缓存机制的影响,尤其是在比较数值超过 -128 到 127 范围的 Integer 对象时,应该使用 equals() 方法进行比较,以避免出现不一致的结果。

Java 自动装箱和缓存机制:Integer 比较结果分析

原文地址: https://www.cveoy.top/t/topic/nqsc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录