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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李敬卫 中级黑马   /  2012-12-21 12:52  /  1830 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
}

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 分 。

查看全部评分

9 个回复

倒序浏览
这个是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.

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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 的值(有符号的比较)。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
sum是基本数据类型,没有compareTo(Integer)方法,this.sum是指本类对象中的sum

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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,说明它们的值相等,就只能按照姓名的先后顺序排列了。

希望能对你有帮助(个人学习理解)!
回复 使用道具 举报
我想问的是:int num=(o.sum).compareTo(this.sum);//这样写不也是比较吗?为什么要封装成对象比较?不知你们注意到了没?
回复 使用道具 举报
楼主你理解错了
1、int没有那个compare方法,所以要把他封装成包装类Integer
回复 使用道具 举报
filter 中级黑马 2012-12-23 14:36:19
8#
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比较的结果
}
回复 使用道具 举报
如果你理解
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:31
10#
新手学习了,compareTo要对象才能用,要把数字包装成对象,我就知道这点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马