java包装类Integer缓存问题

小白求解答

源码是这样的
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}

我的理解是:如果传进来的参数是100,那么把100代入返回的代码则是

return IntegerCache.cache[100 + (-IntegerCache.-128)];

这样理解的话,那么返回的是cahce数组的下标[-28] , 则[-28]的下标对应的值就不是100;

请问这里返回值的代码为什么要这么写:return IntegerCache.cache[i + (-IntegerCache.low)];

请帮忙解答下,十分感谢。

数组是从0开始索引的
i-low相当于计算i与数组开始的距离
如果i==low,计算结果为0,对应访问数组第0项
对于你的问题,输入100且下限为-128的话,运算后得到的值为+288
有帮助望采纳