A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a3330682 中级黑马   /  2014-4-21 23:56  /  1082 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 a3330682 于 2014-4-22 14:47 编辑

24、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
答案是不对!可是不明白
String s1="abc";
String s2=new String( "abc");
s1.equals(s2)==true;
s1==s2  false;这不是对象值相同而hashcode不同么?

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
这个问题其实很简单, 因为在(x.equals(y) == true) 这个方法中,调用的equals方法是属于Object 对象的
这个方法比较的就是 hashcode值  
而String 类的 .equals()方法是重写了 Object 父类的 .equals()方法和hashcode方法 已经比较的不是hashcode值了 所以才会出现上述情况
而一般对象的.equals()方法 除非是重写了父类Object.equalse()方法 不然比较的都是hashcode值
与‘==’的性质是一样的
回复 使用道具 举报
随风而去 发表于 2014-4-22 00:02
这个问题其实很简单, 因为在(x.equals(y) == true) 这个方法中,调用的equals方法是属于Object 对象的
这 ...

是啊 我也是这么想的  那它着个题目就有问题?那应该是有相同对象值也可以有不同的hashcode值啊;只是从写了equals方法而已啊
回复 使用道具 举报
a3330682 发表于 2014-4-22 00:09
是啊 我也是这么想的  那它着个题目就有问题?那应该是有相同对象值也可以有不同的hashcode值啊;只是从 ...

呵呵,记住 你是重写了.equals方法 而这方法本身的定义比较的就是hashcode值
回复 使用道具 举报
a3330682 发表于 2014-4-22 00:09
是啊 我也是这么想的  那它着个题目就有问题?那应该是有相同对象值也可以有不同的hashcode值啊;只是从 ...

hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值
两个内容相同地址不同的字符串,hashcode是根据字符串内容算出来的话,因为使用的公式和参与运算的字符串一样,所以hashcode是一样的。
但是比较依据的不一定是hashcode值啊。
一般String的==方法是比较的两个字符串的内存地址。
即两个字符串
地址一!=地址二(所以S1==S2是false)
内容一==内容二(所以hashcode值相同)
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马