随笔-0  评论-1  文章-7  trackbacks-0
看下面这段代码的执行结果是什么?
  Integer a = 127;
  Integer a1 = new Integer(127);
  Integer a2 = Integer.valueOf(127);
  
  Integer b = 127;
  Integer b2 = Integer.valueOf(127);
  
  Integer c = 128;
  Integer c1 = Integer.valueOf(128);
  
  Integer d = 128;
  Integer d1 = Integer.valueOf(128);
  
  System.out.println(a == a1);
  System.out.println(a2 == b2);
  System.out.println(c == c1);
  System.out.println(c1 == d1);
  System.out.println(a == b);
  System.out.println(c == d);;
是这样的吗?
false
true
false
false
true
false 从结果可以看出JDK5的自动装箱实际上是调用了valueOf方法;
而Integer的valueOf方法源代码是这样的:
    public static Integer valueOf(int i) {
      final int offset = 128;
      if (i >= -128 && i <= 127) { // must cache
         return IntegerCache.cache[i + offset];
      }
      return new Integer(i);
    }
而IntegerCache中的缓存是这样的:
    static final Integer cache[] = new Integer[-(-128) + 127 + 1];
    static {
         for(int i = 0; i < cache.length; i++)
         cache[i] = new Integer(i - 128);
    }
所以上面的结果咋看起来会让人不解。
posted on 2008-11-25 12:57 adrian615 阅读(107) 评论(0)  编辑  收藏 所属分类: javase

只有注册用户登录后才能发表评论。


网站导航: