Java中有关String地址hashcode的问题
我用new开辟的两块空间 a,b
两块空间的内容是一样的,我发现地址也是一样的
后来我是用if判断两个是否相等,为啥却不输出yes了呢?
说明你没搞清楚哈希值到底是干啥的
哈希值是一种散列算法,它能保证相同的值哈希过后得到的数值相同,而不同的值哈希过后得到的数值也不同
你把它跟取地址搞混了吧
Object类默认的hashCode方法确实是获取地址值,但String类对hashCode方法进行了重写,使得String里的hashCode实际是与字符串内容绑定了,与地址没有关系了。
因此,当两个字符串的值是一样时,hashCode的值也会是一样的。
而 == 比较的是地址值,a、b对象都是new出来的,地址值肯定是不同的,所以比较结果是false。
等等比较的是地址,每new一次就是一个新的地址,hashcode值相等地址有不一定相等,地址相等时hashcode方法调用值必然相等