首页 > 图灵资讯 > 技术篇>正文

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,摸摸头部
  • 写一个单元测试,跑吧

Java Long对象对比,用equals函数_equals

  • 突然,心里有一个卧槽。查了资料才发现。
  • 当Long类型的值超过[-128、127]时,它将是一个新的对象,如果不超过,它将被放置在缓存中。
  • 因此,当Long型的值超过[-128、127]时,==判断不会相等,可以理解为此时==比较两个对象的地址,而不是价值。
  • 正式的比较应该是用的equals函数。

Java Long对象对比,用equals函数_Short_02

三、后记
  • 我知道String类型的对象对比需要使用equals,不能直接==
  • 只是忘记了LongByteShortInteger·这些类型的对象也需要使用equals,不能直接用==

感觉不错,一键三连(点赞+收藏+关注)

上一篇 javaUSB接口
下一篇 Java 注解

文章素材均来源于网络,如有侵权,请联系管理员删除。