static void fun4(){
String str1 = "abc";String str2 = new String("abc");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
if(str1 == str2) System.out.println("相同");
else System.out.println("不相同");
}它的运行结果居然是:
96354
96354
不相同小生不懂了,求哪位前辈指教!

解决方案 »

  1.   

    if(str1 == str2) 比较的是内存地址,不是内容。
    用:
    if(str1.equals(str2))
      

  2.   

    但是他们的hashCode()是相等的,hashCode()得到的值不就是“等同于地址”(我的意思是hashCode与地址是一一对应的)吗?
      

  3.   


    错,hashCode()是针对内容的,可以翻译为“摘要”。跟地址完全没啥关系。
      

  4.   

    再次谢谢了,
    不过我的老师说:“hashCode()是对象地址经过某种运算而得到的唯一值”。
    所以我需要查查资料,证实一下。
      

  5.   

    你理解错了,或者你老师说错了。hashCode主要作用是快速判断两个对象的内涵是否相等。
      

  6.   

    有一定道理。新建两个空的Object对象,hashCode是不同,但是他们可能是根据内存地址转换的。
    但是String重写了hashcode,你就要去看String的hashcode 是怎么来的。
    可以自己尝试读源代码。
      

  7.   

    我查了一下API确实是这样。谢了。
      

  8.   

    我差了一下API,确实是这样,谢了。
      

  9.   

    Java对象的equals()和hashCode()的使用 可以看看这个文章:http://blog.csdn.net/RichardSundusky/article/details/1508028
      

  10.   


    好多对象都用相同的hashcode,但是不同的对象,内存地址一定不一样
      

  11.   

    这就是没明白“==”与equal()的区别了
    你程序中初始化字符串的两种方法,所得的变量都是成员变量,它们所在得地址都在堆中,都分配内存地址,而“==”比较的是两个字符串的地址,而不是内容。地址当然不同,所以输出不相同。如果你改成equal,肯定输出相同。