文章目录
- 一、前文
- 二、调试
- 三、后记
一、前文
同事问我一个问题,我咋一看也愣住了
代码:
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
,不能直接用==
。
觉得好,就一键三连呗(点赞+收藏+关注)