黑马程序员技术交流社区

标题: 看这段代码 [打印本页]

作者: 403383221    时间: 2013-4-28 16:42
标题: 看这段代码
本帖最后由 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;

作者: 袁梦希    时间: 2013-4-28 16:51
本帖最后由 袁梦希 于 2013-4-28 17:11 编辑

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

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

看下图的帮助文档:



希望可以解决楼主的问题
作者: 肖宇宥    时间: 2013-4-28 17:03
int num = this.age-arg0.age;这样写也可以吧,本来compareTo()就是根据相减,返回正数/负数/0,来判断谁大谁小。
但是如果是字符串比较就不适用了,所以,还是写compareTo(),这样比较通用
作者: 高正新    时间: 2013-4-28 17:21
int num = new Integer(this.age).compareTo(new Integer(arg0.age));
这样写,运用父类方法比较两个对象,很严谨。

为啥不直接这样写??????
int num = this.age-arg0.age;
这样写,是在做一个运算,但是二者本来是对象的,用到了自动拆箱。
(个人感觉不是很严谨,如果一个age为null,这个程序是不是就报错了?)
作者: 庞瑞堂    时间: 2013-4-28 17:56
你这样写应该也可以,但是有一定的局限性,当两个变量都为int类型时,这样写没有问题,但是如果要是出现字符串对象的情况下,就不能这样写,为了保证代码的健壮性,还是用compareTo()好些。




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