欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#Java小知识点:Integer类型对象的比较

程序员文章站 2024-03-22 09:36:52
...

#Java小知识点:Integer类型对象的比较

小问题:观察以下代码,尝试比较两组Intger对象的大小?

public class IntegerCompare{
    public static void main(String[] args) {
//        第一组比较
        Integer a = 9;
        Integer b = 9;
        System.out.println(a == b);
//        第二组比较
        Integer c = 128;
        Integer d = 128;
        System.out.println(c == d);
    }
}

运行结果:

#Java小知识点:Integer类型对象的比较

原因分析:

为什么同样类型的对象在比较过程中会出现不同的结果呢?我们根据Integer包装类的源码不难发现,我们在给Integer类型对象赋值的时候是一个装箱的过程。那么在装箱过程中,会自动调用Integer类中的valueOf()方法。

以下为Integer包装类valueOf()方法源码:

#Java小知识点:Integer类型对象的比较

通过valueOf()方法的源码不难发现,该方法有一个if条件判断, 如果赋值的数值在-128至127之间,这个装箱过程可以通过原来缓存的数值实现,并不用创建新的对象;反之则需要创建一个新的对象来进行赋值。

因此,我们可以从题目中发现,下面一组数字中的128已经超过了原来的缓存数值范围,所以创建了一个新对象,导致比较的时候是两块不同的内存地址,结果为false。

——————————————————————————————————————————————————————