最近在做的一个项目framework中有这样一段类似的代码看的不是很明白String a="";a="abc";if(0!=a.compareto("abc")){
    在这里有一些处理;
}我不太明白为什么不用下面这种方法
if(a.equals("abc")){
    在这里有一些处理;
}为什么要有compareto 而不用 equals 呢、?

解决方案 »

  1.   

    你的类是不是实现了Comparable接口
      

  2.   


    实现或是不实现Comparable接口有什么关系么、?
      

  3.   

    compareto会依次比较两个字符串的UNICODE值,返回的结果有三种情况,是方便用于实现排序的逻辑,一般用于重写集合的排序方法,而equals单纯的只是比较两者值是否相等,只有两种返回情况。
      

  4.   


    但是在framework中并没有重写compareto方法,就是调用String的compareto方法,
    这个返回值我知道,我就是不明白为什么不用equals,是不是用compareto有什么特别的意义?
    难道是架构framework的这个人习惯?
      

  5.   

    你查下String类就知道,其实String类就知道,它其实也是实现了Comparable接口的方法,这是也可理解为它在Set<String>中提供了默认的排序方法,而其它类希望在SET中实现排序,也可以通过实现了Comparable接口来重写compareto方法来实现自己的逻辑排序,你可以看下源码,如果我没有记错,String的compareto方法也调用了equals方法,而compareto的返回值可以是正整数,负整数,0,对于提供的返回值的含义是:
    假如a.compareto(b)返回正数,表示a相对于b的位置在b前面(负数则相反),如果返回0,则表示两者是指向同一对象的。当然,string的compareto也是可以通过判断返回值是否为0来判断它们是否同一对象,不过string的compareto里面也是调用了Object的equals方法来实现自己的功能,所以如果只要判断两字符串是同一对象,equals是可以是首选的。
      

  6.   

    类似代码?
    真正的代码也是String类型间的比较吗?不说清楚可就大不相同了
      

  7.   

    compareto是Comparable接口的方法,真正的代码是你自己去实现的,只不过String类已经提供了自己实现这个接口的方法,不是说这个方法是也是String类型的比较,我是说String类里的compareto方法本来也用到String类型的比较。
      

  8.   


    首先谢谢楼上的回答,
    根据楼上的回答,我是不是可以得出结论:就在我的这个项目中 用compareto没有什么特别的意义,就是说equals可以替换compareto是吧?有可能是架构的人的习惯问题?
      

  9.   


    可以这么说,个人习惯而已,除非下面还跟有什么else if ( 0 < a.compareto("abc") ){...} 或者 else if ( 0 > acompareTo ( "abc" ) ) {...}