考虑这个类:为什么这个地图检索产生一个NPE?
A
0.0
B
Exception in thread "main" java.lang.NullPointerException
at TestMap.main(TestMap.java:14)
如果我用注释行替换现有的线紧贴它下面的工作:
public class TestMap extends HashMap<String, Float> {
public static void main(String[] args) {
TestMap tm = new TestMap();
tm.put("A", 0F);
tm.put("B", null);
String[] keys = new String[]{"A", "B"};
for (String key : keys) {
System.out.println(key);
Float foo = (tm == null ? 0F : tm.get(key));
// Float foo = tm.get(key);
System.out.println(foo);
}
}
}
产生NullPointerException循环的第二次迭代期间上线Float foo =...
生产如预期的那样,分配foo = null。为什么这两种情况下的行为不同?
我会声明'final TestMap tm = ...'并放弃'tm == null'检查。 – 2010-09-28 16:12:10