Java的平等运算符是可交换的吗?

Dol*_*000 7 java autoboxing syntactic-sugar

请考虑以下Java代码:

Integer foo = bar();
if(foo == 5) ...;
if(5 == foo) ...;
Run Code Online (Sandbox Code Playgroud)

这些是比较平等的-尤其是在的可能性foonull?他们是扩展到foo.getValue() == 55 == foo.getValue()/或更类似于foo.equals(new Integer(5))new Integer(5).equals(foo)/或其他东西?NPM中可能有一个或两个或两个都没有?

Erw*_*idt 1

来自JLS

\n\n
\n

15.21.1。数值相等运算符 == 和 !=

\n\n

如果等式运算符的操作数均为数字类型,或者\n 其中一个为数字类型,另一个可转换 (\xc2\xa75.1.8) 为\n 数字类型,则对操作数执行二进制数字提升\n (\xc2\xa75.6.2)。

\n
\n\n

5.1.8的相关规则是:

\n\n
\n

如果 r 是 Integer 类型的引用,则拆箱转换会将\nr 转换为 r.intValue()

\n
\n\n

5.6.2 说:

\n\n
\n

5.6.2. 二进制数字提升

\n\n

当运算符将二进制数字提升应用于一对操作数(每个操作数必须表示可转换为数字类型的值)时,将按顺序应用以下规则:

\n\n

如果任何操作数是引用类型,则对其进行拆箱转换 (\xc2\xa75.1.8)。

\n
\n\n

这意味着与和 的含义if(foo == 5) ...;相同。\n如果等于,则在任何一种情况下您都会得到 NPE。if(foo.intValue() == 5) ...;if(5 == foo)if (5 == foo.intValue())foonull

\n