Dol*_*000 7 java autoboxing syntactic-sugar
请考虑以下Java代码:
Integer foo = bar();
if(foo == 5) ...;
if(5 == foo) ...;
Run Code Online (Sandbox Code Playgroud)
这些是比较平等的-尤其是在的可能性foo是null?他们是扩展到foo.getValue() == 5和5 == foo.getValue()/或更类似于foo.equals(new Integer(5))和new Integer(5).equals(foo)/或其他东西?NPM中可能有一个或两个或两个都没有?
来自JLS:
\n\n\n\n\n15.21.1。数值相等运算符 == 和 !=
\n\n如果等式运算符的操作数均为数字类型,或者\n 其中一个为数字类型,另一个可转换 (\xc2\xa75.1.8) 为\n 数字类型,则对操作数执行二进制数字提升\n (\xc2\xa75.6.2)。
\n
5.1.8的相关规则是:
\n\n\n\n\n如果 r 是 Integer 类型的引用,则拆箱转换会将\nr 转换为 r.intValue()
\n
5.6.2 说:
\n\n\n\n\n5.6.2. 二进制数字提升
\n\n当运算符将二进制数字提升应用于一对操作数(每个操作数必须表示可转换为数字类型的值)时,将按顺序应用以下规则:
\n\n如果任何操作数是引用类型,则对其进行拆箱转换 (\xc2\xa75.1.8)。
\n
这意味着与和 的含义if(foo == 5) ...;相同。\n如果等于,则在任何一种情况下您都会得到 NPE。if(foo.intValue() == 5) ...;if(5 == foo)if (5 == foo.intValue())foonull