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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马州州 中级黑马   /  2012-8-7 18:48  /  1323 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

compareTo是接口Comparable的方法
compare是接口Comparator的方法
我们在定义比较器的时候,代码如下
class MyCompare implements Comparator
{
public int compare(Object o1,Object o2)
{
  Student s1 = (Student)o1;
  Student s2 = (Student)o2;
  int num = s1.getName().compareTo(s2.getName());这里的compareTo是调用的谁的?又没有继承Comparable,这里为什么能调用成功
  if(num==0)
  {
   return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
  }
上面红色的compareTo是调用的谁的?又没有继承Comparable,这里为什么能调用成功
程序虽然导包了,但是我查了API,Comparable是lang包里的,我们这里用的是util的包
我就是不明白这里的compareTo方法是怎么调用来的

6 个回复

倒序浏览
请问楼主getName()  放回结果是不是字符串  
public final class Stringextends Objectimplements Serializable, Comparable<String>, CharSequence
字符串String  类里就实现了compareTo这个方法  你调用的就是字符串的这个方法了
回复 使用道具 举报
刘向阳 发表于 2012-8-7 18:57
请问楼主getName()  放回结果是不是字符串  
public final class Stringextends Objectimplements Serializ ...

能不能稍微详细的说下是怎么调用的呢,你那一串代码没看明白
回复 使用道具 举报
马州州 发表于 2012-8-7 19:10
能不能稍微详细的说下是怎么调用的呢,你那一串代码没看明白

啊,举个例子吧,  String  str1="abc"   String  str2="abc"   str1.compareTo(str2)   s1.getName().compareTo(s2.getName())  一个道理啊  都是用的String类的compareTo()方法啊  String类不是实现了Comparable接口了嘛。我没有说错吧,要是有什么问题,在说。多家共同进步。

点评

谢谢你拉哥们,我明白啦  发表于 2012-8-7 19:39

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
楼主,compareTo是属于String类,是String类的默认方法



复写compare方法是为了比较两个对象是否相同
楼主使用名字比较
所以就用到了String里的方法
按字典顺序比较两个字符串
从而判断是否为同一对象
回复 使用道具 举报
至于为什么没导入就可以使用
是因为这个


看到没有,人家是上帝的子民

所以只要是字符串,创建出来就有这个比较的功能
不需要导入

点评

一语惊醒梦中人啊,看见这个我终于明白了。。。。前面那个哥们说的我也明白,但是我还是在纠结没有导包就能调用,这个上帝的子民是不用导包.....  发表于 2012-8-7 19:39

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
问题已解决,谢谢两位

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

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