在Java中,比较int和可能为null的整数最干净的方法是什么?

在Java中,比较int和可能为null的整数最干净的方法是什么?,java,casting,nullpointerexception,Java,Casting,Nullpointerexception,或者,通过先前的空检查,它开始看起来有点难看 System.out.println( ((Integer) 8).equals( m.get("null") ) ); // returns false 有没有更好的方法写这个?谢谢。如果只有一个参数可能是null(与将未知值与常数进行比较时的情况相同),请像这样使用equals(): System.out.println( m.contains("null") != null && m.get("null").equals( 8

或者,通过先前的空检查,它开始看起来有点难看

System.out.println( ((Integer) 8).equals( m.get("null") ) ); // returns false

有没有更好的方法写这个?谢谢。

如果只有一个参数可能是
null
(与将未知值与常数进行比较时的情况相同),请像这样使用
equals()

System.out.println( m.contains("null") != null && m.get("null").equals( 8 ) );

请注意,您的示例通常不起作用,因为将非原语值与
=
进行比较时,仅当它们引用相同的对象实例时,才会返回true。(在本例中,由于非常具体的原因,这种情况可能是正确的,但大多数情况下并非如此。)

操作符不比较值,而是引用

您应该使用
.equals()
方法,将其应用于
整数
变量(您确定该变量不为
null
且不会抛出NPE):


这将打印
false
,即使
m.get(“null”)
返回
null
,我尽可能避免强制转换,因此我宁愿使用下面的方法,在我看来,这也会更好看:

Integer eight = 8; //autoboxed
System.out.println(eight.equals(m.get("null")));

不,因为它不起作用。您不能将两个
整数
=
进行比较,因为这将比较引用而不是整数值。请参阅中的更多信息

您需要一个助手方法,例如:

Integer.valueOf(8).equals(m.get("null"))

为了扩展公认的答案:我发现自己必须检查两个整数变量的相等性,这两个整数变量可能是空的,也可能不是空的

因此,我的解决方案是:

布尔等于= Optional.ofNullable(objectA.getNullableInteger()).equals(Optional.ofNullable(objectB.getNullableInteger())


这取决于还有谁来参加舞会。当然,他们最终生成的代码基本相同。“演员阵容”实际上是一个自动装箱指令。@HotLicks是的,将原语强制转换为其各自的装箱类型甚至是静态类型检查。出于风格原因,我仍然不喜欢它。OP代码中更严重的问题当然是使用
=
来比较
整数
是否相等,正如其他答案所指出的。I必须承认,我一眼就忽略了这一点,只回答了他眼前的问题:演员是否“被认为是拙劣的风格”(问题自那时起编辑)是的,我猜他最初使用的是
==
,但很快就把它编辑掉了。奇怪的是,对于小价值的正整数来说,它实际上会起作用,因为它们基本上是“实习的”。我不相信他打算这么做(尽管我承认他的全部意图很难预测)。这基本上就是OP的建议。@HotLicks这不是我写答案的时候,OP编辑了问题。是的,我同意这个问题从一开始就措辞含糊,他编辑了十几次。这个话题变得相当混乱。
Integer eight = 8; //autoboxed
System.out.println(eight.equals(m.get("null")));
Integer.valueOf(8).equals(m.get("null"))
boolean safeIntegerCompare(Integer a, int b)
{
    if (a != null) 
      return a.intValue() == b;
    return false;
}