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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 403383221 中级黑马   /  2013-4-28 16:42  /  1355 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 403383221 于 2013-4-29 10:10 编辑

  1. <p>public class Student implements Comparable<Student>{
  2. private String name;
  3. private int age;
  4. public String getName() {
  5.   return name;
  6. }
  7. public void setName(String name) {
  8.   this.name = name;
  9. }
  10. public int getAge() {
  11.   return age;
  12. }
  13. public void setAge(int age) {
  14.   this.age = age;
  15. }
  16. public String toString(){
  17.   return name+":"+age;
  18. }
  19. public int hashCode(){
  20.   return name.hashCode()+age*34;
  21. }
  22. public boolean equals(Object obj){
  23.   if(!(obj instanceof Student)){
  24.    throw new ClassCastException("类型不匹配");
  25.   }
  26.   Student s = (Student)obj;
  27.   return this.name.equals(s.name) && this.age == s.age;
  28. }
  29. public int compareTo(Student arg0) {
  30.   int num = new Integer(this.age).compareTo(new Integer(arg0.age));
  31.   //int num = this.age-arg0.age;为啥不直接这样写??????
  32.   if(num == 0){
  33.    return this.name.compareTo(arg0.name);
  34.    }
  35.   return num;
  36. }

  37. }
  38. </p>
复制代码
这是Map集合的练习,为了让学生类具备可比较性,实现了 Comparable接口,我想问的是,重写compareTo()时
int num = new Integer(this.age).compareTo(new Integer(arg0.age));
为啥不直接这样写??????
int num = this.age-arg0.age;

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 袁梦希 于 2013-4-28 17:11 编辑

楼主你好
new Integer(this.age),这样写的目的是把数值类型的封装为了对象类型,便于操作。
因为Comparable接口中的compareTo()方法是对两个对象进行比较的。

其实我个人理解:如果像你那样写也可以,因为这是一个自动装箱的过程,他会把数值类型
变为对象Integer对象类型。

看下图的帮助文档:



希望可以解决楼主的问题
回复 使用道具 举报
int num = this.age-arg0.age;这样写也可以吧,本来compareTo()就是根据相减,返回正数/负数/0,来判断谁大谁小。
但是如果是字符串比较就不适用了,所以,还是写compareTo(),这样比较通用

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
int num = new Integer(this.age).compareTo(new Integer(arg0.age));
这样写,运用父类方法比较两个对象,很严谨。

为啥不直接这样写??????
int num = this.age-arg0.age;
这样写,是在做一个运算,但是二者本来是对象的,用到了自动拆箱。
(个人感觉不是很严谨,如果一个age为null,这个程序是不是就报错了?)

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你这样写应该也可以,但是有一定的局限性,当两个变量都为int类型时,这样写没有问题,但是如果要是出现字符串对象的情况下,就不能这样写,为了保证代码的健壮性,还是用compareTo()好些。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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