Java中int、Integer之间的相等比较

先贴一段Dome代码,大家一看便知:

/**
 * Created by 冯晓 on 2017/11/20.
 */
public class IntegerTest {
 
    public static void main(String[] args) {
 
        // 两个new出来的Integer类型的数据比较,相当于把new出来的地址作比较
        Integer a0 = new Integer(1);
        Integer a1 = new Integer(1);
        System.out.println("Integer 对象作比较 a0 == a1: " + (a0 == a1));
 
        // 调用intValue方法得到其int值
        System.out.println("使用intValue得到int值作比较 a0 == a1: " + (a0.intValue() == a1.intValue()));
 
        // 把Integer类型的变量拆箱成int类型
        int a2 = 1;
        System.out.println("将Integer自动拆箱 a1 == a2: " + (a1 == a2));
 
        // Integer对象赋值比较,其实也是内存地址的比较
        // 自动装箱,如果在-128到127之间,则值存在常量池中
        Integer a3 = 30;
        Integer a4 = 30;
        System.out.println("Integer对象赋值比较 a3 == a4: " + (a3 == a4));
 
        // Integer对象赋值(超过-128~127区间)比较
        Integer a5 = 128;
        Integer a6 = 128;
        System.out.println("Integer对象赋值(超过-128~127区间)比较 a5 == a6: " + (a5 == a6));
 
        // Integer对象赋值(超过-128~127区间)比较,调用intValue后再作比较
        Integer a7 = 128;
        Integer a8 = 128;
        System.out.println("Integer对象赋值(超过-128~127区间)比较,调用intValue后 a7 == a8: " + (a7.intValue() == a8.intValue()));
 
        // 使用Integer类的equals()方法进行的是数值的比较 
        Integer a9 = 129;
        Integer a10 = 129;
        System.out.println("Integer类的equals()方法进行的是数值的比较 a9 == a10: " + a9.equals(a10));
    }
}

运行结果:

Integer 对象作比较 a0 == a1: false
使用intValue得到int值作比较 a0 == a1: true
将Integer自动拆箱 a1 == a2: true
Integer对象赋值比较 a3 == a4: true
Integer对象赋值(超过-128~127区间)比较 a5 == a6: false
Integer对象赋值(超过-128~127区间)比较,调用intValue后 a7 == a8: true
Integer类的equals()方法进行的是数值的比较 a9 == a10: true

1、在-128~127的Integer值并且以Integer x = value;的方式赋值的Integer值在进行==和equals比较时,都会返回true,因为Java里面对处在在-128127之间的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128127的范围,进行==比较时是进行地址及数值比较。

2、第三段旨在说明:==和equals的区别,==是进行地址及值比较,无法对==操作符进行重载,而对于equals方法,Integer里面的equals方法重写了Object的equals方法,查看Integer源码可以看出equals方法进行的是数值比较。

下面就是Integer源码,可以看出equals进行的就是数值的比较:

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

最后感谢勤奋的各位程序员大大的乐于分享,下面贴出参考博客。

  • Java Integer(-128~127)值的==和equals比较产生的思考
  • java中两个Integer类型的值相比较的问题

你可能感兴趣的:(Java中int、Integer之间的相等比较)