项目里用 Long、Integer 比较用户 ID 时偶尔判断错误,你觉得最可能是什么问题?
我的判断
用户 ID 偶发比较错误,第一反应是包装类型用了 ==:它比较对象身份,小值缓存让问题在测试数据上被掩盖。
我会搜索这条链路里所有 Long、Integer 的 == 和 !=。包装类型之间这样比较的是引用,不是数值;Integer 常见的 -128~127 会复用缓存对象,所以小测试账号看起来正常,换成真实的大用户 ID 就失败。
业务比较统一写成:
Objects.equals(requestUserId, order.getUserId())
如果字段业务上不允许为空,我会在进入领域逻辑前校验并拆箱成 long,后面用基本类型比较。这样还避免了 Long 和 long 自动拆箱时因为 null 抛 NullPointerException。
修复后会补三组用例:缓存范围内、缓存范围外和 null。仅把当前一行改成 .equals 不够,DTO 映射、缓存反序列化和数据库 nullable 定义也要一起确认。