黑马程序员技术交流社区

标题: 复写hashCode时hashCode是怎样将String转成int的? [打印本页]

作者: caobin    时间: 2014-12-2 14:44
标题: 复写hashCode时hashCode是怎样将String转成int的?
本帖最后由 caobin 于 2014-12-2 14:44 编辑

如例子,复写的时候如果不在name后面调用hashCode方法就会报String 无法转换为int?为什么是String无法转换为int呢?突然明白了,原来我定义这个方法的返回值是int,但是调用的方法hashCode是怎么将String转成Int的?

class Person
{
        private String name;
        private int age;
        public Person(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
        public int hashCode()
        {
                return name.hashCode()+age;
        }
        public boolean equals(Object obj)
        {
                if(!(obj instanceof Person))
                return false;
                Person p = (Person)obj;
                return this.name.equals(p.name)&&this.age==p.age;
        }
}



作者: kerner    时间: 2014-12-2 14:57
  1.     public int hashCode() {
  2.         int h = hash;
  3.         if (h == 0 && value.length > 0) {
  4.             char val[] = value;

  5.             for (int i = 0; i < value.length; i++) {
  6.                 h = 31 * h + val[i];
  7.             }
  8.             hash = h;
  9.         }
  10.         return h;
  11.     }
复制代码


这是String的hashcode方法,它和对象的值有关。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2