黑马程序员技术交流社区

标题: Comparable接口中的疑问 [打印本页]

作者: 李敬卫    时间: 2012-12-21 12:52
标题: Comparable接口中的疑问
public int compareTo(Student o) {
int num=new Integer(o.sum).compareTo(new Integer(this.sum));//这句话怎么理解?请详细解释
if(num==0)
return o.name.compareTo(this.name);
return num;
}

作者: 郭金龙    时间: 2012-12-21 13:01
这个是compareTo的jdk介绍:

public int compareTo(Integer anotherInteger)在数字上比较两个 Integer 对象。
指定者:
接口 Comparable<Integer> 中的 compareTo
参数:
anotherInteger - 要比较的 Integer。
返回:
如果该 Integer 等于 Integer 参数,则返回 0 值;如果该 Integer 在数字上小于 Integer 参数,则返回小于 0 的值;如果 Integer 在数字上大于 Integer 参数,则返回大于 0 的值(有符号的比较)。
从以下版本开始: 1.2

可以看出你比较的是Student的num这个属性。那么可以看出如果比较的两个student的num是相等就会返回0.
作者: 焦健    时间: 2012-12-21 13:01
int num=new Integer(o.sum).compareTo(new Integer(this.sum));
这句代码的意思是在数字上比较两个Integer类型的变量,
new Integer(o.sum)是把o.sum转换为Integer类型。然后调用Integer类中的compareTo方法,与由new Integer(this.sum)转换为Integer类型的变量进行数值比较。再将比较的结果存入到num中。
下面是Integer类中的compareTo方法介绍。
public int compareTo(Integer anotherInteger)
    在数字上比较两个 Integer 对象
返回:
     如果该 Integer 等于 Integer 参数,则返回 0 值;如果该 Integer 在数字上小于 Integer 参数,则返回小于 0 的值;如果 Integer 在数字上大于 Integer 参数,则返回大于 0 的值(有符号的比较)。
作者: 高境    时间: 2012-12-21 13:04
sum是基本数据类型,没有compareTo(Integer)方法,this.sum是指本类对象中的sum
作者: Spring up    时间: 2012-12-21 13:08
int num=new Integer(o.sum).compareTo(new Integer(this.sum));//这句话怎么理解?请详细解释

讲的通俗点就是:
new Integer(o.sum).compareTo(new Integer(this.sum)):
比较的是传进来的对象的值与本类对象的值的比较,因为是比较器,所以返回的是大于0,等于0或小于0的int值。
if(num==0)
return o.name.compareTo(this.name);
如果等于0,说明它们的值相等,就只能按照姓名的先后顺序排列了。

希望能对你有帮助(个人学习理解)!
作者: 李敬卫    时间: 2012-12-21 13:20
我想问的是:int num=(o.sum).compareTo(this.sum);//这样写不也是比较吗?为什么要封装成对象比较?不知你们注意到了没?
作者: 罗海清    时间: 2012-12-23 13:12
楼主你理解错了
1、int没有那个compare方法,所以要把他封装成包装类Integer

作者: filter    时间: 2012-12-23 14:36
public int compareTo(Student o) {//三个compare to方法是不一样的,这个compare to是复写接口comparable中的抽象方法
int num=new Integer(o.sum).compareTo(new Integer(this.sum));
//这个compare to是调用Integer类的compare to方法,把对象o的sum属性封装成Integer对象,当前对象this的sum属性也封装成Integer对象
//然后调用比较方法,(new Integer(o.sum)).compare To(new Integer(this.sum))比较好理解一点
if(num==0)//如果num属性比较的值相同
return o.name.compareTo(this.name);//比较name属性,这个compare to方法是字符串o.name对象的方法
return num;//返回num比较的结果
}

作者: 黄锦成    时间: 2012-12-23 15:31
如果你理解
String s1 = "abc";
String s2 = "aaa";
int result = s1.compareTo(s2);//默认按照字母顺序排序

int num=new Integer(o.sum).compareTo(new Integer(this.sum));//这句话怎么理解?请详细解释
同样的,数字也可以按照数字顺序排序
compareTo要对象才能用,所以要把数字包装成对象

作者: 陈进    时间: 2012-12-23 15:53
新手学习了,compareTo要对象才能用,要把数字包装成对象,我就知道这点




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