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

关于equals()方法!
在java核心技术里面有这样一句话:只有两个对象同属于一个类时,它们才有可能相等。其中的类是指对象的类型吗?
还有在hashCode中,String s1="abc";String s2=new String("abc");书上说s1和s2有相同的hashCode值,hashCode值不是表示对象的存储地址吗?s1和s2怎么会相等?

------解决方案--------------------
equals()方法是用来判断两个对象的引用上是否相同。该方法返回一个布尔值。如果该对象的引用与要比较的obj对象相同则返回true,否则返回false。

Object类中提供了hashCode()方法用来返回对象的哈希码值,该值是通过将该对象的内部地址转换成一个整数来实现的。会针对不同的对象hashCode方法会返回不同的整数值。

对于String s1="abc";String s2=new String("abc");
s1.equals(s2)返回的结果是true.
根据equals(Object)方法,如果两个对象是相等的,即obj1.equals(obj2)返回的结果是true,那么在两个对象中的每个对象上调用hashCode()方法都必须生成相同的整数结果。
但是对于两个不同的对象来说,其哈希码值是不相同的。
------解决方案--------------------
在java核心技术里面有这样一句话:只有两个对象同属于一个类时,它们才有可能相等。其中的类是指对象的类型吗?
是的

还有在hashCode中,String s1="abc";String s2=new String("abc");书上说s1和s2有相同的hashCode值,hashCode值不是表示对象的存储地址吗?s1和s2怎么会相等?
hashCode不是对象的存储地址,是通过一个算法,把对象的内存信息转换成一个整型值
s1指向的对象和s2指向的对象不同,但是两个对象的内存信息一样,都是abc字符数组,所以计算出来的hashCode值一样
equals方法可以重写,对于String来说就是判断两个对象的内存信息是否一样
一般来讲,重写equals方法的时候,也要重写hashCode,即equals为ture的时候,应该也要保证hashCode值相同