以下是 for 的hashCode()
来源String
:
public int hashCode()
{
int h = hash;
if (h == 0 && count > 0)
{
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++)
{
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
off
被初始化offset
为 0(我在源代码中到处查看,每个赋值都将其设为 0,仅此而已)。然后在for
循环中,val
通过 viaoff
而不是i
. 为什么是这样?为什么不直接使用i
并消除对offset
开始的需要?我认为存在是有充分理由的offset
。有什么见解吗?