刚刚花了几个令人沮丧的小时来调试这段代码:
LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
Integer boxedPci = 52;
Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : -1;
上面的代码会产生一个NullPointerException异常。下面的代码则不会:
LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
Integer boxedPci = 52;
Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : Integer.valueOf(-1);
唯一的区别是将-1用Integer.valueOf()包装。我相信一旦有人解释这段代码为什么会表现出这样的行为,我一定会拍自己的脑门..但是能否有人解释一下这段代码为什么会表现出这样的行为呢? :)
-- 编辑
想了想,我怀疑NPE来自rsrqs.get()返回null,然后Java尝试将其解压缩为int,然后再打包回一个Integer。 Integer.valueOf()强制Java执行unbox-box步骤。故事的道德:不要忽略Eclipse中的那些装箱警告 ;)