的原因
X == y
正确与二进制数值提升有关。当至少一个等于运算符的操作数可转换为数值类型时,将使用数值等于运算符。首先,第一个操作数被取消装箱。然后,两个操作数都转换为
int。
而
X.equals(y)
是正常的函数调用。如前所述,
y将自动装箱到一个
Short对象。
Integer.equals如果参数不是
Integer实例,则始终返回false
。通过检查实现可以很容易地看出这一点。
有人可能会说这是设计缺陷。

的原因
X == y
正确与二进制数值提升有关。当至少一个等于运算符的操作数可转换为数值类型时,将使用数值等于运算符。首先,第一个操作数被取消装箱。然后,两个操作数都转换为
int。
而
X.equals(y)
是正常的函数调用。如前所述,
y将自动装箱到一个
Short对象。
Integer.equals如果参数不是
Integer实例,则始终返回false
有人可能会说这是设计缺陷。