比较 "long" 和 "Long"

Comparing "long" and "Long"

我想比较一个 long 值(原始类型)和另一个 Long 值(包装类型):

long x = 5;
Long y = 5L;

// version 1: only safe, if x is a primitive type
var isEqual = x == y;

// version 2: y needs to be converted to its primitive type
var isEqual = x == y.longValue();

// version 3: using Object.equals(), x will be converted to its wrapper type
var isEqual = Objects.equals(x, y);

问题是: 使用 版本 2 代替 版本 3 有什么好处吗?

Objects.equals(x, y) 的优点是它涵盖了 null 情况。如果 Long 变量为空,前两个将抛出 NPE。

另一方面,Objects.equals(x, y) 会自动装箱 long(原始)参数,从而创建一个对象。但通常这不应该是一个问题。

所以:只是 Objects.equals() 因为比较涉及包装器对象并保持代码简单易读,否则只需在将原语与 Long.longValue().

进行比较之前检查是否为空