今天偶然看到下面这句话
String 类 - 缓存第一个方法调用的哈希码
hashCode
他为什么要缓存它?为什么是第一次打电话?为什么是哈希码?
很明显可以假设这是由于它的immutable属性,但我仍然在我心中我不认为这些问题的答案是什么(如果不难,请解释一下谁知道答案。
今天偶然看到下面这句话
String 类 - 缓存第一个方法调用的哈希码
hashCode
他为什么要缓存它?为什么是第一次打电话?为什么是哈希码?
很明显可以假设这是由于它的immutable属性,但我仍然在我心中我不认为这些问题的答案是什么(如果不难,请解释一下谁知道答案。
然后,为了
hashCode()在再次调用时不再计算哈希码。因为在第一次调用该方法之前,
hashCode()还没有计算出哈希码,还需要返回一些东西。是的,它已连接。由于字符串是不可变的,因此哈希码可以被缓存,而不是每次都重新计算。
好吧,一般来说,Java 中以这种方式缓存一些结果是很常见的做法。
因为在第一次调用
hashcode之前可能根本不需要它,因此提前计算它是没有意义的。另一方面,如果应用程序请求hashcode,那么您需要返回正确的值给它。因为字符串的不可变性,一个字符串的hash码总是一样的,所以没人费心去保存它。另外,它不占用太多空间。
出于同样的原因,任何缓存都是为了性能。计算
hashcode操作非常昂贵(您需要遍历整行并计算一些值),另一方面hashcode,它在处理各种集合(set、map 等)时被积极使用,通过缓存这个值,您可以以相对较低的内存成本在一定程度上加快程序的速度。