Java中两个Long对象如何比较是否相等
Posted 半马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中两个Long对象如何比较是否相等相关的知识,希望对你有一定的参考价值。
学java的都知道8种基本类型,知道Long和long的区别,前者定义的是对象,后者定义的是long类型的变量。
但是今天在比较两个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; }
以上是关于Java中两个Long对象如何比较是否相等的主要内容,如果未能解决你的问题,请参考以下文章