考慮這個類:爲什麼這個地圖檢索產生一個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