Integer a = new Integer(1);
Integer b = new Integer(1);
Long c = new Long(1);
System.out.println(a.equals(b));
System.out.println(a.equals(c));
问题是为什么a.equals(c)给出了错误?
答案 0 :(得分:5)
当且仅当参数不是
true
并且是包含与此对象相同的int值的null
对象时,结果为Integer
。
c
不是Integer
,因此a.equals(c)
会返回false
。
答案 1 :(得分:2)
因为,您正在使用Integer类的equals
方法,该方法如下:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
此处的条件失败if (obj instanceof Integer)
,因为您的案例中的c
是Long
的实例。
答案 2 :(得分:0)
因为两个对象不是同一个Class
,一个是Integer
而另一个是Long
,所以当您说.equals()
答案 3 :(得分:0)
Integer(和大多数类)的等于从检查参数的类是否等于对象自己的类开始。如果不是,则equals将返回false。如果您尝试在整数和字符串之间调用equals,则更有意义,它们无法在值上与整数和long相同的方式进行比较。因此,所有非整数且在整数对象上调用equals的类都将返回false。
答案 4 :(得分:0)
如果你看一下Integer.equales(Object obj)的来源,你就会明白为什么:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
Long不是Integer的实例。
答案 5 :(得分:0)
简而言之:因为c
不是Integer
对象。您正在调用Integer#equals(Object)
并传递Long
作为参数。 Integer#equals(Object)
的源代码是:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
由于obj
是Long
而不是Integer
,if (obj instanceof Integer)
检查失败,然后方法会返回false
。