JAVA中,String类中的hashCode()方法有什么作用呢?

来源:百度知道 编辑:UC知道 时间:2024/05/20 09:58:23
String a = new String("i love you");
String b = new String("i love you");
我知道上面a与b的哈希值是一样。能不能由此判断a与b都是引用同一字符串对象。
--------------------------------------------
若b中的字符串值变为 b = "i hate you",同时a的字符串值保持为原值,即i love you。
发现这时的a与b的哈希值是不一样。这时也能不能判断它们引用了两个不同的字符串对象。
----------------------------------------------
当 b = "i love you"且a不变时,发现 a与b的哈希值又一样了。能不能说b又引用了与a一样的对象。
总言之,能不能依靠String类中已覆盖过的hashCode()方法来判断字符串类型的引用变量(即如a或b那样的变量)是否指向同一个对象。这个被覆盖过的hashcode()方法所产生的哈希值能不能作为对象的一个唯一的标识号。
想再问一下:在String类中被覆盖过的hashCode()和Object类中的hashCode()方法有什么区别?作用是不是与Object类中的原方法一样呢?

hash从意义上来说应该是实现值的比较。
hashCode值与对象引用没有必然联系。在java中,值相同的两个字符串不一定是同个对象。比如你上面的a和b就是两个不同的对象。
字符串的hash值是根据字符串的值计算的,相同值的字符串对象hash值一定相同,具体的计算方法在jdk的文档中有描述.
每个java对象都有一个唯一的标识,object类中的hash方法就是直接返回对象的这个内部id号,与string的hash方法是不同的,object的hash方法能够用来区分不同的对象.因为原始的object对象没有任何有意义的值可用来计算哈希

我只知道String类中equals方法是被覆盖了,
难道tohashcode也被覆盖呢?
赶快show源码

ab不一样的啊

hashcode是获取hash码,只有拥有hash码的对象,才能放入到hashtable和hashmap中