2012-12-20 178 views
-2

Integer.valueOf(int i)方法包含assesrt检查IntegerCache更多或等于127冗余断言

public static Integer valueOf(int i) { 
    assert IntegerCache.high >= 127; 
    if (i >= IntegerCache.low && i <= IntegerCache.high) 
     return IntegerCache.cache[i + (-IntegerCache.low)]; 
    return new Integer(i); 
} 

缓存实现看起来像这样

static { 
     // high value may be configured by property 
     int h = 127; 
     String integerCacheHighPropValue = 
      sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); 
     if (integerCacheHighPropValue != null) { 
      int i = parseInt(integerCacheHighPropValue); 
      i = Math.max(i, 127); 
      // Maximum array size is Integer.MAX_VALUE 
      h = Math.min(i, Integer.MAX_VALUE - (-low)); 
     } 
     high = h; 

     cache = new Integer[(high - low) + 1]; 
     int j = low; 
     for(int k = 0; k < cache.length; k++) 
      cache[k] = new Integer(j++); 
    } 

,所以你可以通过传递属性值来增加缓存大小。但是,实现不会允许您将缓存大小设置为低于127(或它?)。那么他们为什么要在Integer.valueOf()中发表断言。开发人员不相信自己的实现吗? 据我所知,如果缓存低于127 Integer.valueOf(int i)会返回错误的价值,但这种事情不可能发生......

是否有必要在那里断言?

+0

问题是什么? – Ilya

回答

1

待办事项开发商不信任自己的实现?

这正是断言的目的:抓编程错误。假设没有错误,就不会发现任何错误。

1

WHE您编译参数-enableassertions或者干脆-ea代码。然后,断言将踢。默认情况下,提供给您的JVM不会使用该参数进行编译。所以这个断言在运行时被忽略了。