首页 > 编程语言 >Java Long对象对比,用equals函数

Java Long对象对比,用equals函数

时间:2023-04-20 21:35:31浏览次数:34  
标签:Java temp 564 equals Long getUserId SecurityUtils



文章目录

  • 一、前文
  • 二、调试
  • 三、后记


一、前文

同事问我一个问题,我咋一看也愣住了

代码:

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函数_Long

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

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

三、后记

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

觉得好,就一键三连呗(点赞+收藏+关注)


标签:Java,temp,564,equals,Long,getUserId,SecurityUtils
From: https://blog.51cto.com/u_16081772/6210673

相关文章

  • 学习JavaScript
    操作步骤开通语音识别服务在调用语音识别相关接口前,您需要进入 语音识别控制台,进行实名认证和人脸认证,认证完成后,阅读《用户协议》后勾选“我已阅读并同意《用户协议》”,然后单击【立即开通】,即可一键开通录音文件识别、实时语音识别、一句话识别、录音文件识别极速版、语......
  • JavaScript的节点操作
    目录节点概述节点层级添删等节点操作使用节点操作的示例节点概述一般来说,节点至少拥有nodeType,nodeName,nodeValue这三个基本属性1.元素节点的nodeType为12.属性节点的nodeType为23.文本节点的nodeType为3(包括换行,文字,空格)节点层级1.父节点:node.parentNode(1)paren......
  • 深入理解Java泛型、协变逆变、泛型通配符、自限定
    禁止转载重写了之前博客写的泛型相关内容,全部整合到这一篇文章里了,把坑都填了,后续不再纠结这些问题了。本文深度总结了函数式思想、泛型对在Java中的应用,解答了许多比较难的问题。纯函数协变逆变泛型通配符PECS法则自限定Part1:协变与逆变Java8引入了函数式接口,......
  • java -- 函数式编程
    函数式编程面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是怎么做。有时只是为了做某事情而不得不创建一个对象,而传递一段代码才是我们真正的目的。LambdaLambda是一个匿名函数,可以理解为一段可以传递的代码。......
  • Java学习笔记(二)
    1.请描述标识符的命名规则答:(1)由26个英文字母大小写,数字,_或$组成。(2)不能以数字开头。(3)不能使用关键字和保留字(指已经定义过的变量),但是可以包含关键字和保留字。(4)严格区分大小写,无长度限制。(5)不能有空格。2.请描述数据类型存在的意义数据有明确的类型划分,为了确保变量保留的......
  • Java学习笔记(一)
    1、JDK,JRE,JVM三者之间的关系、答:JDK是编译环境,集成了JRE和一些JAVA开发工具包。JRE是运行环境。JVM是一种平台软件,负责将字节码文件解释成机器码并提交操作系统执行。将.class文件解释并提交操作系统。2、为什么要配置环境变量配置环境变量:为了在系统中的任何位置都可以访问jdk......
  • 浪潮集团Java研发实习
    2023.4.19上网课上多久三个项目最熟悉那几个SpringBoot常见注解SpringBoot配置数据库配置url时区自己写各个层?框架生成.Mybatis#和$用法5.Mysql分组关键字事务使用过吗Vue怎么创建......
  • 后端long类型传到前端精度丢失
    问题:c#的long类型精度比前端JS的number精度高,前端JS的long类型只有17位,当后端传给前端的long类型超过17位时,就会造成数据精度丢失。解决方案: 1.我们可以自定义一个json序列化的转换器,将long类型转换为string类型。代码如下:publicclassLongToStringConverter:Json......
  • java RandomAccess 遍历效率
     RandomAccess 是判断集合是否支持快速随即访问,以下是个测试用例:JDK中推荐的是对List集合尽量要实现RandomAccess接口如果集合类是RandomAccess的实现,则尽量用for(inti=0;i<size;i++)来遍历而不要用Iterator迭代器来遍历,在效率上要差一些。反过来,如果List是SequenceList......
  • 15 个必须知道的 Java 面试问题(2年工作经验)
    【Java核心】1)Whatisthepurposeofserialization?2)WhatisthedifferencebetweenJDKandJRE?3)Whatisthedifferencebetweenequalsand==?4)WhenwillyouuseComparatorandComparableinterfaces?5)Whatisthewait/notifymechanism?6)......