您的位置 首页 java

Java Long == 奇怪的现象

在判断两个Long型数据是否相等的时候遇到了一个奇怪的现象

不废话直接上代码

   @Test
    public void testLong() {
         long  id1 = 1285453273490309121L;
        Long id2 = 1285453273490309121L;
        System.out.println("id1 == id2 : " + (id1 == id2));
        System.out.println("id1.equals(id2) : " + (id1.equals(id2)));

        long id3 = 1285453273490309121L;
        long id4 = 1285453273490309121L;
        System.out.println("id3 == id4 : " + (id3 == id4));

    }  
 运行结果
id1 == id2 :  false 
id1.equals(id2) : true
id3 == id4 : true  
    @Test
    public void testInt() {
        Long id1 = 128L;
         Long  id2 = 128L;
        System.out.println("id1 == id2 : " + (id1 == id2));
        System.out.println("id1.equals(id2) : " + (id1.equals(id2)));

        Long id3 = 127L;
        Long id4 = 127L;
        System.out.println("id3 == id4 : " + (id3 == id4));
        System.out.println("id3.equals(id4) : " + (id3.equals(id4)));
    }  
 运行结果
id1 == id2 : false
id1.equals(id2) : true
id3 == id4 : true
id3.equals(id4) : true  

==为啥会有这么奇怪的现象呢

原来 java 中 Long 是包装类,long是关键字

包装类比较是需要用equals的

那为什么 id3 == id4 是 true呢

看Long的源码

   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);
    }
  

原来是放入了缓冲中

结论,包装类比较使用 equals 不要使用 ==

记录下

文章来源:智云一二三科技

文章标题:Java Long == 奇怪的现象

文章地址:https://www.zhihuclub.com/183727.shtml

关于作者: 智云科技

热门文章

网站地图