Java 比较 Integer 是否相等

4,406 阅读1分钟

比较两个Integer是否相等,有两种方法,一种是使用==,一种是使用equals

使用==比较两个Integer引用是否相等时,实际比较的是两个引用指向的对象是否是同一对象,必须是指向同一对象时才会相等。可以理解为==是比较两个Integer是否相同,而不是相等。

Integer重写了equals方法,如果方法的参数不为空且是Integer类型,会使用==比较当前Integer和参数中的Integer包含的value是否相等。所以equals方法是比较两个Integer对象的实际值是否相等。

/**
 * Compares this object to the specified object.  The result is
 * true if and only if the argument is not null and is an Integer object that
 * contains the same int value as this object.
 */
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

示例

Integer nums1 = new Integer(5);
Integer nums2 = new Integer(5);
System.out.println(nums1);    // 5
System.out.println(nums2);    // 5
System.out.println(nums1 == nums2);         // false
System.out.println(nums1.equals(nums2));    // true

Integer会自动解包,所以打印Integer对象时,不会打印对象地址,而是直接打印自动解包后的值。

nums1nums2是两个不同的对象,所以直接使用==比较时,它们不相等。