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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yanzhigang 中级黑马   /  2013-5-23 16:00  /  1506 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两个对象值相同,(x.equals(y)==true),但可以有不同的hash code,这句话对不对啊?请说明原因。谢谢。

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

5 个回复

倒序浏览
正确的吧。像是在字符串中equals就是判断字符是否相同。在Integer中,equals就是判断两个数据是否相同。这都是复写了Object中的equals方法。在以上两个例子中,x.equals(y)为真,但是hash code是可能不同的。
回复 使用道具 举报
楼主,一般情况下,hash code是对象的哈希值,也就是代表地址值,不同的对象是不会一样的
但是自定义的对象可以重写hashCode函数,这样不同对象的hashCode函数返回的哈希值就有可能会一样了
所以,如果x和y如果是你自定义的对象,并且重写了hashCode函数,那么它们的hash code就有可能一样
回复 使用道具 举报
这句话是对的,看下面代码
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 String x = new String("123");
  4.                 String y = new String("123");
  5.                
  6.                 [color=Lime][color=YellowGreen]//x,y是两个对象,地址值不同,==操作,返回false;[/color]
  7.                 System.out.println(x == y);
  8.                
  9.                 [color=Lime]//String中equals重写了Object中的equals方法,比较的是两个字符串是否相同。返回true。[/color]
  10.                 System.out.println(x.equals(y));
  11.         }
  12. }
复制代码
回复 使用道具 举报
这句话是对的,看下面代码:
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 String x = new String("123");
  4.                 String y = new String("123");
  5.                
  6.                 //x,y是两个对象,地址值不同,==操作,返回false;
  7.                 System.out.println(x == y);
  8.                
  9.                 //String中equals重写了Object中的equals方法,比较的是两个字符串是否相同。返回true。
  10.                 System.out.println(x.equals(y));
  11.         }
  12. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
楼主你a好,如果问题以解决,请修改类,谢谢合作。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马