





















原逻辑使用了 Hutool 工具类。由于未进行判空处理,代码隐式依赖 try-catch 来规避空指针异常( NPE )。出于对代码质量的要求(以及个人对 Hutool 的去依赖化偏好),决定让 AI 重写该方法。
原始代码:
try {
// 原始逻辑:仅判断月份枚举是否相等
boolean isBirthdayMonth = DateUtil.monthEnum(new Date()) == DateUtil.monthEnum(userInfo.getDateofbirth());
} catch (Exception e) {
// 吞掉异常
}
指令 (Prompt):
帮我修复这行的空指针并重新写一个日期判断方法。
模型: Cursor (Claude Sonnet 4.5 thinking)
AI 生成的代码:
boolean isBirthdayMonth = userInfo.getDateofbirth() != null
&& DateUtils.isSameMonth(new Date(), userInfo.getDateofbirth());
/**
* 判断两个日期是否在同一个月份
*
* @param date1 日期 1
* @param date2 日期 2
* @return true-同一月份,false-不同月份
*/
public static boolean isSameMonth(Date date1, Date date2) {
if (date1 == null || date2 == null) {
return false;
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
// ⚠️ 问题点:AI 默认加上了年份的判断
return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
&& cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
}
AI 修复后的代码虽然解决了 NPE 问题,但引入了严重的逻辑错误:
YEAR 和 MONTH)。后果: 由于出生年份通常不等于当前年份,导致该判断在生日场景下永远返回 false。
为了验证这是个例还是通病,随后使用类似的提示词在网页版测试了 2 组高级模型
提示词: 判断两个日期是否在同一个月份 jdk 8 写个方法
| 模型 | 结果 | 备注 |
|---|---|---|
| Gemini 3 Pro thinking | ❌ 包含年份判断 | 同样误解了意图 |
| ChatGPT 5 (Thinking) | ❌ 包含年份判断 | 同样误解了意图 |
以上文案由 ai 润色排版
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。