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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李大伟 高级黑马   /  2013-4-19 16:11  /  984 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李大伟 于 2013-4-19 22:58 编辑
  1. class Student implements Comparable<Student>{
  2.         private String name;
  3.         private int ma,cn,en;
  4.         private int sum;
  5.         Student(String name,int ma,int cn,int en){
  6.                 this.name = name;
  7.                 this.ma = ma;
  8.                 this.cn = cn;
  9.                 this.en = en;
  10.                 sum = ma+cn+en;
  11.         }
  12.         public int compareTo(Student s){
  13.                 int num = new Integer(this.sum).compareTo(new Integer(s.sum));
  14.                 if(num==0)
  15.                         return this.name.compareTo(s.name);
  16.                 return num;
  17.         }
  18.         public String getName(){
  19.                 return name;
  20.         }
  21.         public int getSum(){
  22.                 return sum;
  23.         }
  24.         public int hashCode(){
  25.                 return name.hashCode()+sum*78;
  26.         }
  27.         public boolean equals(Object obj){
  28.                 if(!(obj instanceof Student))
  29.                         throw new ClassCastException("类型不匹配");
  30.                 Student s = (Student)obj;
  31.                 return this.name.equals(s.name) && this.sum==s.sum;
  32.         }
  33.         public String toString(){
  34.                 return "student["+name+","+ma+","+cn+","+en+"]";
  35.         }
  36. }
复制代码
我想问下 为什么要重写toString,equals,hashCode,作用是什么,求详解。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

2 个回复

倒序浏览
equals 是为了判定两个学生是否为同一人的。。。
hashCode和equals有个不成文的规定。
如果equals相等那么hashCode也相等,在泛型那个个部分有提到。
toString如果不重写的话会返回类型+@+hashCode()
其他我就不知道了....
回复 使用道具 举报
通俗的说:
toString方法是你要打印输出这个对象时,执行的代码,若System.out.println(student)时,打印的字符格式就是"student["+name+","+ma+","+cn+","+en+"]"
equals,hashCode:当你要存入以哈希表为数据结构的集合(如HashSet、HashMap)中时,会调用hashCode方法,若返回值不同,则这个集合认为它们不是同一个对象;返回值相同,则再调用equals方法来判断是否相同。
compareTo:是你要存入以二叉树为数据结构的集合(如TreeSet、TreeMap)中时,会调用此方法来判断对象是否相同

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马