在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;
}
equals不等于两个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()⽅法。以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论