只花了几个小时调试这段代码:
LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
Integer boxedPci = 52;
Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : -1;
Run Code Online (Sandbox Code Playgroud)
以上产生了NullPointerException.以下代码不:
LinkedHashMap<String, Integer> rsrqs = new LinkedHashMap<String, Integer>();
Integer boxedPci = 52;
Integer boxedRsrq = boxedPci != null ? rsrqs.get(boxedPci.toString()) : Integer.valueOf(-1);
Run Code Online (Sandbox Code Playgroud)
唯一的区别是用Integer.valueOf()包装-1.一旦有人解释了为什么这个代码的行为方式,我肯定我会打破我的前额..但有人可以向我解释为什么这个代码的行为方式:)
- 编辑
第二个想法,我怀疑NPE来自rsrqs.get()返回null,我认为java在尝试解包成int之前,然后再回到整数.Integer.valueOf()强制Java执行unbox-box步骤.故事的道德启示; 不要只忽略Eclipse中的那些拳击警告;)