文章目录
- 一、前文
- 二、调试
- 三、后记
一、前文
同事问我一个问题,我咋一看也愣住了
代码:
if(ObjectUtil.isNotNull(temp.getUserId()) && temp.getUserId()!=SecurityUtils.getUserId()) {
logger.error(temp.toString());
logger.error("SecurityUtils.getUserId() = "+SecurityUtils.getUserId());
return AjaxResult.error("暂无权限");
}
日志:
Group{id=119, userId=564, createTime=Mon Dec 26 16:54:02 CST 2022, updateTime=null}
SecurityUtils.getUserId() = 564
我看了半天,没错呀。
564==564呀。
哪错了呢?
二、调试
- 认真一看UserId的类型Long,摸了摸脑袋
- 写个单元测试,跑一跑吧

- 顿时,心中一个卧槽。查了下资料才发现。
- 当Long型的值超过了【-128,127】的时候,他会new一个新的对象,如果没有超过就会放到缓存中。
- 所以当Long型的值超过了【-128,127】的时候,
==判断就不会相等了,可以理解为此时==比较的是两个对象的地址而不是值。
- 正规的比较应该是用
equals函数。

三、后记
- 我知道String类型的对象对比需要用到
equals,不能直接==。 - 只是忘记了
Long、Byte、Short、Integer·这些类型的对象,也是需要用equals,不能直接用==。
觉得好,就一键三连呗(点赞+收藏+关注)













![[Android]视图的控触操作-MotionEvent](https://img-blog.csdnimg.cn/7fd8fd978751449383a4485f8d52d5ba.gif)





