深度揭秘AI代码出现空指针与属性访问双重判断错误的根本原因
最近在AI辅助编程实践中,一个有趣的现象逐渐浮现——即使项目里大量使用了Hutool、Guava或自建工具库,大模型依然倾向于生成类似下方的代码:
if (userInfo != null && userInfo.ifEnabled) {// 业务代码}
而不是项目里更常见的写法:
if (ObjectUtil.isNotEmpty(userInfo) && userInfo.ifEnabled) {// 业务代码}
或者:
if (ObjectUtil.isEmpty(userInfo)) {return;}if (userInfo.ifEnabled) {// 业务代码}
很多开发者的第一反应是:AI是不是不够聪明,连项目用了什么工具类都分辨不出?实际原因比这复杂得多。
AI 为什么会这样写?
它学习的是全世界的代码
对大模型而言,if (obj != null) 是整个互联网出现频率最高的空值判断模式。无论是JDK官方源码、Spring框架、各类开源项目、教学示例,还是面试题解答,几乎都普遍采用这种写法。而 ObjectUtil.isNotEmpty(obj) 是Hutool特有的工具方法——即便在国内项目中使用广泛,但放在整个训练数据集里占比很小。因此当AI无法确定你的项目习惯时,它会优先输出最通用、最保守的代码。
AI 默认会减少外部依赖
对AI来说,if (obj != null)
