日期:2014-05-20  浏览次数:20830 次

关于String
Java code

    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
不相同

小生不懂了,求哪位前辈指教!

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

------解决方案--------------------
你理解错了,或者你老师说错了。hashCode主要作用是快速判断两个对象的内涵是否相等。
------解决方案--------------------
有一定道理。新建两个空的Object对象,hashCode是不同,但是他们可能是根据内存地址转换的。
但是String重写了hashcode,你就要去看String的hashcode 是怎么来的。
可以自己尝试读源代码。
------解决方案--------------------
Java对象的equals()和hashCode()的使用 可以看看这个文章:http://blog.csdn.net/RichardSundusky/article/details/1508028