比较两个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
对象时,不会打印对象地址,而是直接打印自动解包后的值。
nums1
和nums2
是两个不同的对象,所以直接使用==
比较时,它们不相等。