黑马程序员技术交流社区

标题: compareTo的问题 [打印本页]

作者: 马州州    时间: 2012-8-7 18:48
标题: compareTo的问题
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方法是怎么调用来的

作者: hello world    时间: 2012-8-7 18:57
请问楼主getName()  放回结果是不是字符串  
public final class Stringextends Objectimplements Serializable, Comparable<String>, CharSequence
字符串String  类里就实现了compareTo这个方法  你调用的就是字符串的这个方法了

作者: 马州州    时间: 2012-8-7 19:10
刘向阳 发表于 2012-8-7 18:57
请问楼主getName()  放回结果是不是字符串  
public final class Stringextends Objectimplements Serializ ...

能不能稍微详细的说下是怎么调用的呢,你那一串代码没看明白
作者: hello world    时间: 2012-8-7 19:19
马州州 发表于 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:32
楼主,compareTo是属于String类,是String类的默认方法



复写compare方法是为了比较两个对象是否相同
楼主使用名字比较
所以就用到了String里的方法
按字典顺序比较两个字符串
从而判断是否为同一对象
作者: 张振纲    时间: 2012-8-7 19:35
至于为什么没导入就可以使用
是因为这个


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

所以只要是字符串,创建出来就有这个比较的功能
不需要导入
作者: 马州州    时间: 2012-8-7 19:39
问题已解决,谢谢两位




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