您好,欢迎访问一九零五行业门户网

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()方法
以上就是java中如何判断两个long对象是否相等?的详细内容。
其它类似信息

推荐信息