黑马程序员技术交流社区

标题: Long类型的比较方法 [打印本页]

作者: peiyanda    时间: 2015-12-13 20:02
标题: Long类型的比较方法
在学习代码时看到了这样一段:
// Long不能直接比较数值
if(long1.intValue() != long2.intValue()){……}

这个……有点汗。看一下下面这段代码:
        Long maxLong = Long.MAX_VALUE;
        System.out.println(maxLong + ", " + maxLong.intValue());
        Long intLong = -1L;
        System.out.println(intLong + ", " + intLong.intValue());
        False(maxLong == intLong);
        True(maxLong.intValue() == intLong.intValue());
很显然的,两个不相等的Long数值,其intValue()却相等了。
原因很简单。Long是64位,Integer是32位。将Long转为Integer的时候,实际上是直接丢弃高位数据,只保留低位数据。
而intValue()方法,实际的操作只有这一步:
    public int intValue() {
    return (int)value;
    }
相当于10001被砍掉了最高位的1,于是只剩下最低位的1了。

那么要怎么样比较Long数值呢?可以参考下面的代码:
        Long v1 = new Long(1L), v2 = new Long(1L);
        False(v1 == v2);
       True(v1.equals(v2));
        True(v1.longValue() == v2.longValue());

以及
        long vl1 = 1l, vl2 = 1l;
        True(vl1 == vl2);

Long是装箱类型,直接用==运算符,比较的是两个对象的内存地址是否相等。因此不能这么干。
long是基本类型,直接用==比较,就是做内存内数值的比较。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2