首页 > 图灵资讯 > 技术篇>正文
Java Long对象对比,用equals函数
2023-04-21 10:05:45
文章目录
- 一、前文
- 二、调试
- 三、后记
一、前文
同事问我一个问题,我一看就惊呆了
代码:
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]时,它将是一个新的对象,如果不超过,它将被放置在缓存中。
- 因此,当Long型的值超过[-128、127]时,
==
判断不会相等,可以理解为此时==
比较两个对象的地址,而不是价值。
- 正式的比较应该是用的
equals
函数。
- 我知道String类型的对象对比需要使用
equals
,不能直接==
。 - 只是忘记了
Long
、Byte
、Short
、Integer
·这些类型的对象也需要使用equals
,不能直接用==
。
感觉不错,一键三连(点赞+收藏+关注)