Java基础知识,后续会继续补充

今天面试官问了我两个很简单的问题,竟然没打出来,真是羞愧,以后要好好积累!

1、Integer的两个对象如何比较?

  乍看一下使用“==”来比较就好啦,实际不然,“==”比较的是堆中的地址,Integer是int的包装类,Integer的对象值在jdk1.5以上可以自动装箱拆箱,所以平时比较没有注意

  但Integer的源码如下,可以看出,若对应的值大于IntegerCache.low,并小于IntegerCache.high,返回的值是同一个地址的值,若不在这个返回内,则返回的是新的Integer对象,自然堆栈中的地址值就不一致了

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
注:IntegerCache.low为-127,IntegerCache.high=128,所以在这个范围内比较是没有问题的

若超出这个范围如何比较呢?需要用到Integer.intValue()或者用equals方法比较即可


2、double类型的值如何比较?精度不明
(1)若比较是否相等,可以用转换String字符串,利用equals来比较,这种方式只适合精度相同的
(2)若比较大小,可以用Double.doubleToLongBits()方法转换,然后用“==”,“>”或者“<”来比较
(3)若比较是否相等,精度不明,则可以用相减的方式,然后比较减法之后的这个值的精度来确定。

猜你喜欢

转载自www.cnblogs.com/yulongblogs/p/9297234.html