下面是hashCode()
爲String
來源:在String的hashCode()中,offset的存在是什麼原因?似乎是多餘的
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
循環中,通過off
代替i
迭代val
。爲什麼是這樣?爲什麼不只是使用i
並且不需要offset
開始?我認爲offset
存在很好的理由。任何見解?
如果它是已經在內存中的另一個巨大字符串的子字符串,該怎麼辦? –
「我想現在有一個很好的抵消偏差的理由,任何見解?」閱讀'substring'方法的代碼! –
*下面是'String'的'hashCode()'的來源,屬於OpenJDK,可能是HotSpot。請注意,不同的JVM實現可以具有不同的'String'類的'hashCode'方法的實現,例如JRockit的。 –