观察下述代码:
Integer a = new Integer(0);
Integer b = new Integer(0);
Long c = new Long(0);
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(a.equals(0));
输出结果为:
结果 | 解释 |
---|---|
false | ==比较的是两个变量(对于对象类型)的内存地址,而不是内容 |
true | equals比较两个对象的内容 |
false | 两个变量不是同一个类型 |
true | 0自动包装了 |
equals():比较两个相同类型
观察源码:
//Integer源码
public boolean equals(Object obj) {
//如果不是Integer类型则会返回false
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}