作者:袁韦伦世彦琬育 | 来源:互联网 | 2023-02-05 14:39
查看Java的String
类,我们可以看到哈希代码在第一次评估后被缓存.
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i
hash
实例变量在哪里.我有一个问题,为什么我们需要h
额外的变量?
1> Andremoniy..:
仅仅因为hash
循环中的值更改和没有中间临时变量的解决方案不是线程安全的.考虑在多个线程中调用此方法.
说thread-1
开始hash
计算,它0
不再是.稍后一些小的时刻会thread-2
在同hashCode()
一个对象上调用相同的方法,但是看hash
不到0
,但thread-1
还没有完成计算.结果,将使用thread-2
错误的hash
(未完全计算的)值.