似乎即使在单线程中代码也会重新排序?
public int hashCode() {
if (hash == 0) { // (1)
int off = offset;
char val[] = value;
int len = count;
int h = 0;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return hash; // (2)
}
但这对我来说真的很困惑,为什么 (2) 可以返回 0 而 (1) 可以是非零?
如果我在单线程中使用代码,这甚至都行不通,怎么会发生?