在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对象,相等
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Flutter自定义圆盘取色器
2023-07-05 23:55:43
![](https://img.aspxhome.com/file/2023/0/96010_0s.gif)
Java泛型T,E,K,V,N,?与Object区别和含义
2022-02-23 07:25:30
![](https://img.aspxhome.com/file/2023/7/64747_0s.jpg)
Java面试必备八股文整理
2023-11-29 12:03:50
![](https://img.aspxhome.com/file/2023/8/59068_0s.jpg)
mybatis的插件机制示例详解
2023-02-24 23:46:17
Android使用Websocket实现聊天室
2023-07-07 13:01:59
![](https://img.aspxhome.com/file/2023/6/60386_0s.png)
Java @GlobalLock注解详细分析讲解
2023-06-03 03:55:53
![](https://img.aspxhome.com/file/2023/3/64543_0s.png)
Spring的@Autowired加到接口上但获取的是实现类的问题
2023-08-23 21:32:21
springboot vue组件开发实现接口断言功能
2023-11-12 10:26:53
![](https://img.aspxhome.com/file/2023/9/61869_0s.gif)
Java MD5消息摘要算法原理及实现代码
2022-10-22 17:48:03
Java在Excel中创建透视表方法解析
2021-11-03 05:49:45
![](https://img.aspxhome.com/file/2023/5/62955_0s.png)
java客户端登陆服务器用户名验证
2023-11-09 07:03:09
![](https://img.aspxhome.com/file/2023/3/63283_0s.png)
Java如何根据不同系统动态获取换行符和盘分割符
2022-02-27 10:33:10
SpringBoot使用validation-api实现对枚举类参数校验的方法
2021-09-22 19:21:32
![](https://img.aspxhome.com/file/2023/9/61569_0s.png)
springboot读取application.yaml文件数据的方法
2023-09-06 05:29:24
![](https://img.aspxhome.com/file/2023/6/63086_0s.jpg)
java中单例模式讲解
2022-05-22 14:24:07
![](https://img.aspxhome.com/file/2023/5/60335_0s.png)
关于idea中SpringBoot启动失败的坑
2022-07-18 13:02:24
![](https://img.aspxhome.com/file/2023/4/62234_0s.png)
Spring基于注解的缓存声明深入探究
2023-01-20 13:26:06
Spring框架应用的权限控制系统详解
2023-11-11 14:17:11
![](https://img.aspxhome.com/file/2023/2/59332_0s.png)
AndroidStduio3.0 使用gradle将module打包jar文件的方法
2023-07-01 06:57:20
![](https://img.aspxhome.com/file/2023/4/84224_0s.png)
SpringBoot深入探究@Conditional条件装配的使用
2021-08-18 00:06:53
![](https://img.aspxhome.com/file/2023/2/61792_0s.png)