Long和Integer进行equals比较为何为false

Long与Integer都是包装类型,是对象。 所以它们在比较时必须都应该用equals。这个大部分人都知道。但是Long和Integer能直接用equals进行比较吗?

1
2
3
Integer i = new Integer(666);
Long l = new Long(666);
System.out.println(l.equals(i));

运行结果为 False.
查看equals的源码:

1
2
3
4
5
6
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}

发现只要不是同一个类型,就直接返回false。那要怎么比较呢?

把其中一个对象修改成另一个对象的类型。

1
2
3
4
Integer i = new Integer(666);
Long l = new Long(666);
//修改类型
System.out.println(l.equals(i.longValue()));