Java中两个Long对象如何比较是否相等

矫情吗;* 2022-03-17 00:48 475阅读 0赞

做项目时,发现直接用 == 判断两个Long对象时,命名值相等, 却认为false。

搜索资料发现:如果Long的值在[-127,128]之间,用“==”判断是否相等是没问题的,如果不在这个区间,是不能用“==”的。

  1. Long a = 4l;
  2. Long b = 4l;
  3. a == b //true
  4. Long a = 128l;
  5. Long b = 128l;
  6. a == b //false

原因如下源码解释:

  1. public static Long valueOf(long l) {
  2. final int offset = 128;
  3. if (l >= -128 && l <= 127) { // will cache
  4. return LongCache.cache[(int)l + offset];
  5. }
  6. return new Long(l);
  7. }

如果不在[-127,128]之间,则会new一个新对象,自然“==”两个不同的对象,其结果必然是false了。

解决方案:

1、使用Long中的longValue()进行转换

  1. Long a = 128l;
  2. Long b = 128l;
  3. a.longValue() == b.longValue() //true

2、使用Long中的equals()

  1. Long a = 128l;
  2. Long b = 128l;
  3. a.equals(b);//true

下面是该方法源码:

  1. public boolean equals(Object obj) {
  2. if (obj instanceof Long) {
  3. return value == ((Long)obj).longValue();
  4. }
  5. return false;
  6. }

参考:https://blog.csdn.net/zjl_pcw/article/details/79969183

发表评论

表情:
评论列表 (有 0 条评论,475人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js比较对象是否相等

    > 前言:如何判断两个对象是否相等? 两个Object类型对象,即使拥有相同属性、相同值,当使用 == 或 === 进行比较时,也不认为他们相等。这就是因为他们是通过引用(内