在Java中判断两个Long对象是否相等

作者:李白csdn 时间:2022-09-01 11:22:10 

抛出问题:


Long a = 4l;
Long b = 4l;
a == b //true

Long a = 128l;
Long b = 128l;
a == b //false

如果Long的值在[-127,128]之间,用“==”判断是否相等是没问题的,如果不在这个区间,是不能用“==”的,原因如下源码解释:


public static Long valueOf(long l) {
       final int offset = 128;
       if (l >= -128 && l <= 127) { // will cache
           return LongCache.cache[(int)l + offset];
       }
       return new Long(l);
   }

如果不在[-127,128]之间,则会new一个新对象,自然“==”两个不同的对象,其结果必然是false了。

解决方案:

1、使用Long中的longValue()进行转换


Long a = 128l;
Long b = 128l;
a.longValue() == b.longValue() //true

2、使用Long中的equals()


Long a = 128l;
Long b = 128l;
a.equals(b);//true

下面是该方法源码:


public boolean equals(Object obj) {
       if (obj instanceof Long) {
           return value == ((Long)obj).longValue();
       }
       return false;
   }

两个Long类型比较存在的坑

一般来说,两个基本数据类型比较用 “==” 就可以了,平时很少用Long类型比较。

但是最近写项目时遇到了两个Long类型比较,当时也是直接用的双等于,然而当debug时却发现代码执行到这两个Long类型比较判断时并没有进入这个判断体内,然后上网搜索相关的问题, 其实很简单,但是不知道的话就很很容易入坑。

解决方法具体如下:

可以让两个Long类型的变量分别调用 ==longValue()== 方法来实现就可以了。

代码:


Long a=...;
Long b=...;
if (a.longValue() == b.longValue()) {
            ...;
}

其实Long是java数据包装类的一种,以上属于包装类Long转化为基本数据类型long的情况,以下列举其它数据包装类拆箱转化为基本数据类型的情况:

Integer转为int,需要调用intValue()方法

Double转为double,需要调用doubleValue()方法

Float转为float,需要调用floatValue()方法

总结:

某包装类Xxx转为对应的基本数据类型时,则调用xxxValue()方法。

来源:https://blog.csdn.net/zjl_pcw/article/details/79969183

标签:Java,Long对象,相等
0
投稿

猜你喜欢

  • Flutter自定义圆盘取色器

    2023-07-05 23:55:43
  • Java泛型T,E,K,V,N,?与Object区别和含义

    2022-02-23 07:25:30
  • Java面试必备八股文整理

    2023-11-29 12:03:50
  • mybatis的插件机制示例详解

    2023-02-24 23:46:17
  • Android使用Websocket实现聊天室

    2023-07-07 13:01:59
  • Java @GlobalLock注解详细分析讲解

    2023-06-03 03:55:53
  • Spring的@Autowired加到接口上但获取的是实现类的问题

    2023-08-23 21:32:21
  • springboot vue组件开发实现接口断言功能

    2023-11-12 10:26:53
  • Java MD5消息摘要算法原理及实现代码

    2022-10-22 17:48:03
  • Java在Excel中创建透视表方法解析

    2021-11-03 05:49:45
  • java客户端登陆服务器用户名验证

    2023-11-09 07:03:09
  • Java如何根据不同系统动态获取换行符和盘分割符

    2022-02-27 10:33:10
  • SpringBoot使用validation-api实现对枚举类参数校验的方法

    2021-09-22 19:21:32
  • springboot读取application.yaml文件数据的方法

    2023-09-06 05:29:24
  • java中单例模式讲解

    2022-05-22 14:24:07
  • 关于idea中SpringBoot启动失败的坑

    2022-07-18 13:02:24
  • Spring基于注解的缓存声明深入探究

    2023-01-20 13:26:06
  • Spring框架应用的权限控制系统详解

    2023-11-11 14:17:11
  • AndroidStduio3.0 使用gradle将module打包jar文件的方法

    2023-07-01 06:57:20
  • SpringBoot深入探究@Conditional条件装配的使用

    2021-08-18 00:06:53
  • asp之家 软件编程 m.aspxhome.com