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)
有没有更好的方法来写这个?谢谢。
我尽量避免强制转换,所以我宁愿使用以下内容,在我看来,它看起来也更好:
Integer.valueOf(8).equals(m.get("null"))
Run Code Online (Sandbox Code Playgroud)
不,因为它不起作用。您不能将两个Integer与进行比较==,因为它比较的是引用而不是整数值。查看此问题中的更多信息
您需要一个辅助方法,例如:
boolean safeIntegerCompare(Integer a, int b)
{
if (a != null)
return a.intValue() == b;
return false;
}
Run Code Online (Sandbox Code Playgroud)
该==运营商不比较值,但引用。
您应该使用.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。