Integer源码分析
Integer
public final class Integer不可被继承
其次继承了Number,实现了Comparable
Number类包括将数转换成各种类型的方法,longValue等等
参数
private final int value;
保持数值的
构造方法
public Integer(int value) {
this.value = value;
}
内部类
笔试的时候有时会比较在-128~127里面Integer的数还有大于这个范围的数,在这里面的数是相等的,大于这个数的时候,即使大小一样,执行==的时候是不一样的
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
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) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
}
初始化-128~127的cache值
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
在int转换的时候,如果在-128~127之间的从cache里面获得,当然这个访问的数是一样的。如果超出这个范围这new一个,当然两个数是不一样的。
String转Integer
Integer.valueOf最好用这个,因为返回的是Integer,其他函数返回的是int
还没有评论,来说两句吧...