String str="abc";
String str1=new String("abc");
首先,可以确定这两个肯定不是同一个对象
System.out.println("比较的是str和str1的地址:"+(str==str1)); 比较的是地址值,这句话打印出来的结果是false已经验证了。str和str1的散列码是一样的,是因为在java.lang.String类中将Object类的hashCode()方法覆写了。
Object类中的hashCode()返回的是通过将该对象的内部地址转换成一个整数也就是哈希码,由于每个对象的内存地址都不一样,所以哈希码也不一样。但是在String类中覆写的hashCode()方法,String 对象的哈希码根据以下公式计算: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1],
使用 int 算法,这里 s[i] 是字符串的第 i
个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希值为 0。)
你的str,str1都是“abc”,由此算法计算的hashCode必然是一样的。 |