测试代码 猜猜结果是否如你所想
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3l;
System.out.println(c == d);
System.out.println(e == f);
System.out.println(c == (a+b));
System.out.println(c.equals(a+b));
System.out.println(g == (a+b));
System.out.println(g.equals(a+b));
}
运行结果
true
false
true
true
true
true
是否如你所想?qaq
== 运算符在不遇到算数运算符时不进行拆箱的操作 c == (a+b) 自动拆箱进行比较
equals 不处理类型转换 具体看方法实现
Integer 的equals实现
c.equals(a+b) 执行的是Integer的equals方法
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
Long 的equals实现
g.equals(a+b) 之所以为false,就是因为调用的是Long的equals方法。 a+b 的类型为Integer 类型不匹配所以为false。
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}