在 Java 中将 int 与潜在的 null Integer 进行比较的最简洁方法是什么?

And*_*sch 7 java casting nullpointerexception

Map<String,Integer> m;
m = new TreeMap<String,Integer>();
Run Code Online (Sandbox Code Playgroud)

添加以下强制转换只是为了在 m.get() 为空时避免空指针异常是一种好习惯。

System.out.println( ((Integer) 8).equals( m.get("null") ) ); // returns false
Run Code Online (Sandbox Code Playgroud)

或者,使用先前的空检查,它开始看起来有点难看。

System.out.println( m.contains("null") != null && m.get("null").equals( 8 ) );
Run Code Online (Sandbox Code Playgroud)

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

5go*_*der 9

我尽量避免强制转换,所以我宁愿使用以下内容,在我看来,它看起来也更好:

Integer.valueOf(8).equals(m.get("null"))
Run Code Online (Sandbox Code Playgroud)


nos*_*nos 8

不,因为它不起作用。您不能将两个Integer与进行比较==,因为它比较的是引用而不是整数值。查看此问题中的更多信息

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

boolean safeIntegerCompare(Integer a, int b)
{
    if (a != null) 
      return a.intValue() == b;
    return false;
}
Run Code Online (Sandbox Code Playgroud)


Kon*_*kov 6

==运营商不比较值,但引用。

您应该使用.equals()应用于Integer变量的方法(您确定不是这样null并且不会抛出 NPE):

Integer eight = 8; //autoboxed
System.out.println(eight.equals(m.get("null")));
Run Code Online (Sandbox Code Playgroud)

false甚至会打印m.get("null")返回null