伙伴匹配bug:Long类型id比较bug
问题代码:Long类型id直接 “==” 判断值,结果项目测试一直达不到预期。
// 只有管理员或者队伍的创建者可以修改
if (oldTeam.getUserId() != loginUser.getId() && !userService.isAdmin(loginUser)) {
throw new BusinessException(ErrorCode.NO_AUTH);
}
解决:
// 只有管理员或者队伍的创建者才可以修改
if (oldTeam.getUserId().longValue() != loginUser.getId().longValue() && !userService.isAdmin(loginUser)){ throw new BusinessException(ErrorCode.NO_AUTH);
}
Long源码:
private static class LongCache {
private LongCache(){}
static final Long cache[] = new Long[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Long(i - 128);
}
}
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
和Integer差不多。
顺便看了下Long的equals()方法,最后发现直接调用equals()应该也能解决这个问题。