JJava 知识库
JAVA INTERVIEW

高频面试题

Java基础基础约 2 分钟

项目里用 Long、Integer 比较用户 ID 时偶尔判断错误,你觉得最可能是什么问题?

参考回答约 2 分钟 · 口语表达
我的判断

用户 ID 偶发比较错误,第一反应是包装类型用了 ==:它比较对象身份,小值缓存让问题在测试数据上被掩盖。

我会搜索这条链路里所有 LongInteger==!=。包装类型之间这样比较的是引用,不是数值;Integer 常见的 -128~127 会复用缓存对象,所以小测试账号看起来正常,换成真实的大用户 ID 就失败。

业务比较统一写成:

Objects.equals(requestUserId, order.getUserId())

如果字段业务上不允许为空,我会在进入领域逻辑前校验并拆箱成 long,后面用基本类型比较。这样还避免了 Longlong 自动拆箱时因为 null 抛 NullPointerException

修复后会补三组用例:缓存范围内、缓存范围外和 null。仅把当前一行改成 .equals 不够,DTO 映射、缓存反序列化和数据库 nullable 定义也要一起确认。