原逻辑使用了 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 润色排版
1
TimePPT PRO |
2
JustGoGoGO 1 天前
|
3
JustGoGoGO 1 天前
@TimePPT 请问这个图是怎么传上去的?
|
4
TimePPT PRO @JustGoGoGO v2 付费,有图库额度😂
|
5
tyqing OP 我的提示词:判断两个日期是否在同一个月份 jdk 8 写个方法
问了网页版的高级模型,都对比了年和月,其实我只是期望只对比月,不对比年。 以下是 ai 的回答,对于模糊的指令,ai 没有理解到我的真实意图,认为“同一个月份”就是绝对年月。 或者猜测中文和英文的此时的语义有点区别。 https://gemini.google.com/share/9d80e400126c https://chatgpt.com/share/e/69232b31-1c40-8013-b7cc-84f1e551b6fa |