好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

抛出问题:

?

1

2

3

Long a = 4l;

Long b = 4l;

a == b //true

?

1

2

3

Long a = 128l;

Long b = 128l;

a == b //false

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

?

1

2

3

4

5

6

7

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()进行转换

?

1

2

3

Long a = 128l;

Long b = 128l;

a.longValue() == b.longValue() //true

2、使用Long中的equals()

?

1

2

3

Long a = 128l;

Long b = 128l;

a.equals(b); //true

下面是该方法源码:

?

1

2

3

4

5

6

public boolean equals(Object obj) {

         if (obj instanceof Long) {

             return value == ((Long)obj).longValue();

         }

         return false ;

     }

两个Long类型比较存在的坑

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

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

解决方法具体如下:

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

代码:

?

1

2

3

4

5

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对象是否相等的详细内容...

  阅读:15次