-
我用 Optional 包装返回值、想从此优雅地告别空指针,结果代码里满是 optional.get(),线上照样抛异常崩溃,排查后才明白我只是把空指针换了个名字、根本没用上 Optional 真正的价值的深度复盘
我读了不少用 Optional 优雅处理空值告别 NPE 的文章,深以为然,把一批可能返回空的方法都改成返回 Optional,心想这下调用方就得乖乖处理空值了。可上线后异常监控里照样躺着一堆崩溃,只是异常类型从 NullPointerException 变成 NoSuchElementException。翻调用代码顿时哭笑不得:调用方拿到 Optional 几乎全是直接 .get() 取值,只是…- 0
- 0
-
我从 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
-
我把一个 Integer 赋值给 int 居然抛了空指针,那行代码里根本没有方法调用、找不到 null 是怎么来的,我对着自动拆箱排查了大半天的复盘
我从 Map 取值赋给 int 做计算,int count = map.get("xxx"),偶尔抛 NPE,异常栈恰好指向这行赋值,可它根本没有任何 .方法() 的显式调用,空指针到底哪来的?深挖才懂是 Java 的自动拆箱:int 是基本类型、Integer 是可为 null 的对象,把 Integer 赋给 int 时编译器会隐式调用 .intValue() 拆箱,而 m…- 8
- 0
-
一行算术抛空指针:Java 自动拆箱避坑复盘
这个 bug 让我对着一行算术代码瞪了整整半个小时,怎么也想不通它为什么会抛空指针:我们一个统计接口偶发性地报 NullPointerException,而异常堆栈指向的是 int total = stat.getCount() * 2 这么一行平平无奇的代码。我的第一反应是这怎么可能空指针,stat 我前面明明判过非空了,getCount 就是个普通取值方法,后面是个乘以2的算术运算,一行纯粹的…- 0
- 0
空指针
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!




