-
我从 Map 里取一个计数赋给 int,平时好好的,某次那个 key 不存在、map 返回 null,自动拆箱直接抛了 NullPointerException:一次 Java 自动拆箱 NPE 的深度复盘
我有个 Map counts 存计数,某处 int count = counts.get(key) 取出来用,平时好好的,可线上偶发崩溃,异常栈指向这行 NullPointerException。这就是个取值赋值,count 是 int、get 返回 Integer,哪来的空指针?查清才明白是自动拆箱:那个 key 不存在时 counts.get(key) 返回 null,而我把它赋给 int,J…- 2
- 0
-
一行 int count = map.get(key) 的赋值,在 key 不存在时悄悄触发了自动拆箱、抛出莫名其妙的空指针:一次 Java 自动装箱拆箱的深度复盘
一行 int count = countMap.get(userId) 偶尔抛 NullPointerException,可这行没有任何显式的 . 方法调用,哪来的空指针?根因是 Map.get 返回 Integer、key 不存在时返回 null,而赋给 int 会触发自动拆箱(实为调 .intValue()),对 null 调 .intValue() 就 NPE——这个 .intValue()…- 0
- 0
-
我用 == 比较两个 Integer,小数值时一切正常,某天数值一超过 127 判断就突然失效了,我对着 Java 自动装箱的 Integer 缓存只缓存 -128 到 127 这个坑排查了大半天的复盘
一个堪称 Java 最阴险的坑之一,阴险在绝大多数测试数据下表现正常让你深信不疑,然后在某个数值恰好够大的真实场景里毫无征兆突然失效。我有两个 Integer 值要判断是否相等,图省事用了 ==。Integer a=100,b=100; a==b 是 true 看着没问题,测试用的都是小数值一切正常就上线了。可某天数值大了:Integer x=200,y=200; x==y 竟是 false!更精…- 0
- 0
-
我把一个 Integer 赋值给 int 居然抛了空指针,那行代码里根本没有方法调用、找不到 null 是怎么来的,我对着自动拆箱排查了大半天的复盘
我从 Map 取值赋给 int 做计算,int count = map.get("xxx"),偶尔抛 NPE,异常栈恰好指向这行赋值,可它根本没有任何 .方法() 的显式调用,空指针到底哪来的?深挖才懂是 Java 的自动拆箱:int 是基本类型、Integer 是可为 null 的对象,把 Integer 赋给 int 时编译器会隐式调用 .intValue() 拆箱,而 m…- 0
- 0
-
一行算术抛空指针:Java 自动拆箱避坑复盘
这个 bug 让我对着一行算术代码瞪了整整半个小时,怎么也想不通它为什么会抛空指针:我们一个统计接口偶发性地报 NullPointerException,而异常堆栈指向的是 int total = stat.getCount() * 2 这么一行平平无奇的代码。我的第一反应是这怎么可能空指针,stat 我前面明明判过非空了,getCount 就是个普通取值方法,后面是个乘以2的算术运算,一行纯粹的…- 0
- 0
Integer
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!





