如何确保==将始终使用基元作为相等测试

use*_*361 0 java primitive autoboxing equality equals

根据我的理解,如果我有两个long或者int,==由于自动装箱,测试值相等的运算符有时不起作用.

我需要做些什么来确保==在处理原语时能够在每种可能的情况下工作?

Pet*_*rey 7

向后兼容性要求(和JLS同意),如果你有一个像这样的表达式

double a = ..
double b = ...
if (a == b) // condition
Run Code Online (Sandbox Code Playgroud)

这种情况必须与自动装箱前的方式相同,就像自动装箱后一样.这意味着自动装箱不能也不能在这里适用.

实际上,如果可以使用取消装箱,则自动装箱从不用于编译==表达式.

Integer i = 1000;
int j = 1000;
System.out.println(i == j); // is true
Run Code Online (Sandbox Code Playgroud)

在这种情况下,选择取消装箱而不是装箱.