A String
意味着不可改变.因此,没有必要重新计算哈希码.它在内部缓存在一个名为hash
type 的字段中int
.
String#hashCode()
实现为(Oracle JDK7)
public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; }
其中hash
最初具有的值0
.它只会在第一次调用方法时计算出来.
正如评论中所述,使用反射会破坏对象的不变性.
A String
意味着不可改变.因此,没有必要重新计算哈希码.它在内部缓存在一个名为hash
type 的字段中int
.
String#hashCode()
实现为(Oracle JDK7)
public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; }
其中hash
最初具有的值0
.它只会在第一次调用方法时计算出来.
正如评论中所述,使用反射会破坏对象的不变性.