在用postman测试请求接口时,发现有些用户修改密码会失败,后端抛与当前用户不符,检查后发现这段代码
if (user.getId() != now.getId()) {
throw new UserNotEqualException();
}
问题出在 "!=" 和user的id定义上,这里将user的ID定义了Long而非long,即使用了包装器类型而非基础类型,java的自动拆箱只针对-128-128的数值区间,即若id在-128到128区间内,使用!=会相等,但超过这个范围就会直接比较对象,由于对象地址不同,因此会得出不同的结果,解决办法为改为
if (!user.getId().equalds(now.getId())) {
throw new UserNotEqualException();
}
或是直接将id定义为long类型。



