#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);
}
}
运行结果:
原因分析:
为什么同样类型的对象在比较过程中会出现不同的结果呢?我们根据Integer包装类的源码不难发现,我们在给Integer类型对象赋值的时候是一个装箱的过程。那么在装箱过程中,会自动调用Integer类中的valueOf()方法。
以下为Integer包装类valueOf()方法源码:
通过valueOf()方法的源码不难发现,该方法有一个if条件判断, 如果赋值的数值在-128至127之间,这个装箱过程可以通过原来缓存的数值实现,并不用创建新的对象;反之则需要创建一个新的对象来进行赋值。
因此,我们可以从题目中发现,下面一组数字中的128已经超过了原来的缓存数值范围,所以创建了一个新对象,导致比较的时候是两块不同的内存地址,结果为false。
——————————————————————————————————————————————————————