java基本类型与包装类

一个integer面试问题:

  • 下面这段代码的输出结果是什么?
    publicclassMain{
    publicstaticvoidmain(String[] args) {
    Integer i1 =100;
    Integer i2 =100;
    Integer i3 =200;
    Integer i4 =200;
    System.out.println(i1==i2);
    System.out.println(i3==i4);
    }
    }
    第一个是true,第二个是false;
    看下Integer的value0f源码就明白了:
    public static Integer valueOf(int i) {
    if(i >= -128 && i <= IntegerCache.high)
    return IntegerCache.cache[i + 128];
    else
    return new Integer(i);
    }
    代码中i的值范围是-128-+128之间。如果超出这个范围,会new一个新的对象,所以i=200时,时false。
  • 注意:把上面的Integer 换成Double,两个都是false,原因是二者的实现方法不同,在某个范围内的整型数值的个数是有限的,而浮点数却不是。具体原因建议看看源码的实现。

你可能感兴趣的:(java基本类型与包装类)