String str="abc";
for (int i = 0; i < 100; i++)
{
System.out.println(str.hashCode());
}
1)String是一个不可变的类,它的hashCode被缓存在它的私有变量hash中。String hashCode行为
2)由于字符串str是一个字面值,所以创建的字符串对象被添加到permgen空间的字符串池中。所以当参考str时,它应该给我同一个对象。
调试通过字符串的hashCode方法中的过程,当我调用str.hashCode()时,基于上述两点,它应该进入计算哈希只有一次,接下来99次它应该返回我“缓存哈希私人字符串对象的变量“。它不符合要点1.有人可以让我知道这种行为吗?
调试通过这个,你会注意到hashCode计算100次,我打印hashCode值,看看对象是否有相同的hashCode。
你在哪里看到哈希码计算了100次? – mabbas 2012-07-24 16:06:59
请原谅密切投票 - 我误解了问题。 – 2012-07-24 16:09:35
你错了。它计算一次,除了计算为零的退化情况,例如零长度的字符串。 – EJP 2012-07-25 12:11:45