java中两个long对象如何比较是否相等(代码片段)

半马 半马     2022-11-29     731

关键词:

学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中如何比较两个数组确定是不是相等?

比如说我设计了个密码锁有两个数组int[]secret和int[]input。最后要开锁的时候要确定两个数组中的内容是否相等,我首先是用了if(secret,equals(input))结果调试的时候发现这里答案是不相等。。。然后我又用了secret==input发现结果还是... 查看详情

java怎么比较两个对象是不是相等?

...返回false。但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2,obj1==obj2判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是要求两个变量所指内存地址相等的时候,才能... 查看详情

java判断两个对象是否相等(代码片段)

一、使用==与equals== :它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)equals() :它的作用也是判断两个对象是否相等。但它... 查看详情

教妹学java:如何比较两个字符串相等(代码片段)

“哥,如何比较两个字符串相等啊?”三妹问。“这个问题看似简单,却在StackOverflow上有超过370万的访问量。”我说,“这个问题也可以引申为.equals()和‘==’操作符有什么区别。”“==”操作符用于比较两个对象的地址是否相... 查看详情

java中如何判断两个对象是否相等(javaequalsand==)

原文:https://www.dutycode.com/post-140.html如何判断两个对象相等,这个问题实际上可以看做是如何对equals方法和hashcode方法的理解。从以下几个点来理解equals和hashCode方法:1、equals的作用及与==的区别。2、hashcode的作... 查看详情

java比较两个对象是否相等?

1.判断两个对象是否是同一个引用对象则用==,"=="比的是地址.因为如果地址相同,则就是同一个对象(java中如果两对象(obj1,obj2)相等,那么在修改obj2的时候,obj1的值也会改变。其实相当于内存中只有一个对象,而obj1和obj2连个... 查看详情

java中比较对象

...为包装类会拆箱为基本类型.引用类型==和equals()比较的是两个对象引用是否相等.如果需要通过两个对象的属性是否相等,需要重写Object的equals()方法.字符串比较因为字符串池(stringpool)的存在,字符串的比较有很大不同.通过==比较看... 查看详情

java通过getter方法引用,来比较两个对象是否相等

背景编写代码时,会经常需要编写两个对象是否相等的逻辑,一般会有如下做法直接写在业务代码中;单独写个方法,业务代码中调用;重写equals方法;上面这些做法,都比较复杂,如果属性太多... 查看详情

java:比较两个对象中全部属性值是否相等

点击关注公众号,实用技术文章及时了解来源:xiaoer.blog.csdn.net/article/details/85005295例如下述Java类:import java.io.Serializable;import java.util.List;public class Bean_Topology implements Serializable   查看详情

java比较两个数组里的元素是否相等(代码片段)

  比较两个数组里的元素是否相等可以使用Arrays类调用equals()方法进行比较。不能用==比较,==比的是两个数组对象的地址,如果是两个不同的对象,结果会一直是false. package_3_5_test;importjava.util.Arrays;publicclassFifityFiveTestp... 查看详情

编程题两者接近啥意思

...何判断两者是否相等。这个比较范围就大了,一般有比较两个字符串是否相等,比较两个数组是否相等,两个链表是否相等,两个tress是否相等这样的问题,我们通过代码来一一实现。1.两个字符串是否相等这里有一个考察点,... 查看详情

equals和==方法比较(代码片段)

...题描述今天在使用spotbugs代码走查时发现这样一个问题,两个Long类型的变量使用==判断数值是否相等,spotbugs提示这是一个很致命的错误,代码大概如下,Longl1=123l;Longl2=123l;System.out.println(l1==l2);上面是两个Long类型的变量l1和l2,打... 查看详情

判断java中两个对象是否相等

...返回false。但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2,obj1==obj2判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是要求两个变量所指内存地址相等的时候,才能... 查看详情

如何在jni中比较两个jbytearray?(代码片段)

我想比较两个jbyteArray如果在JNI中相等。是否有任何方法,如“strcmp”?答案如果要检查两个jbyteArrays实际上是否是相同的对象,可以使用env->IsSameObject(array1,array2)进行测试。如果它们实际上是不同的对象,您可以通过逐个元素... 查看详情

如何判断两个对象的值是不是相等java

参考技术A判断两个值是否相等,可以使用=比较地址,equals比较内容。如果比较的是数字,必须使用=比较。 参考技术B这个类是什么样的类,比较类的对象,一般比较的是对象的属性,这样的话就可以在类里面写个CompareTo(XXXX)... 查看详情

java通过getter方法引用,来比较两个对象是否相等(代码片段)

背景编写代码时,会经常需要编写两个对象是否相等的逻辑,一般会有如下做法直接写在业务代码中;单独写个方法,业务代码中调用;重写equals方法;上面这些做法,都比较复杂,如果属性太多... 查看详情

java通过getter方法引用,来比较两个对象是否相等(代码片段)

背景编写代码时,会经常需要编写两个对象是否相等的逻辑,一般会有如下做法直接写在业务代码中;单独写个方法,业务代码中调用;重写equals方法;上面这些做法,都比较复杂,如果属性太多... 查看详情

请教如何比较两个hash是不是相同

...html文件,命名为test.html。2、在js标签内,使用“[]”创建两个数组,分别保存在变量a和变量b中。3、在js标签内,再创建一个变量temp,初始值为1,用于记录数组是否相同。当它为1时,表示两个数组相同,当它为0时,表示两个数... 查看详情