在Java中判断两个Long对象是否相等
抛出问题:
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()方法。
上一篇:Spring mvc整合mybatis(crud+分页插件)操作mysql
栏 目:JAVA代码
本文标题:在Java中判断两个Long对象是否相等
本文地址:http://www.codeinn.net/misctech/160257.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




