
原逻辑使用了 Hutool 工具类。由于未进行判空处理,代码隐式依赖 try-catch 来规避空指针异常( NPE )。出于对代码质量的要求(以及个人对 Hutool 的去依赖化偏好),决定让 AI 重写该方法。
原始代码:
try { // 原始逻辑:仅判断月份枚举是否相等 boolean isBirthdayMOnth= DateUtil.monthEnum(newDate()) == 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 27 天前 |
3 JustGoGoGO 27 天前 @TimePPT 请问这个图是怎么传上去的? |
4 TimePPT PRO @JustGoGoGO v2 付费,有图库额度 |
5 tyqing OP 我的提示词:判断两个日期是否在同一个月份 jdk 8 写个方法br /> 问了网页版的高级模型,都对比了年和月,其实我只是期望只对比月,不对比年。 以下是 ai 的回答,对于模糊的指令,ai 没有理解到我的真实意图,认为“同一个月份”就是绝对年月。 或者猜测中文和英文的此时的语义有点区别。 https://gemini.google.com/share/9d80e400126c https://chatgpt.com/share/e/69232b31-1c40-8013-b7cc-84f1e551b6fa |