日期:2014-05-20  浏览次数:20719 次

请问cmpareTo和equals有什么区别吗?
请问cmpareTo和equals有什么区别吗?
除此之外,还有别的比较字符串的方法吗?
谢谢

------解决方案--------------------
compareTo:按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只有在方法 equals(Object) 返回 true 时才返回 0。 

这是字典排序的定义。如果这两个字符串不同,则要么它们在某个索引处具有不同的字符,该索引对二者均为有效索引,要么它们的长度不同,或者同时具备上述两种情况。如果它们在一个或多个索引位置上具有不同的字符,假设 k 是这类索引的最小值;则按照 < 运算符确定的那个字符串在位置 k 上具有较小的值,其字典顺序在其他字符串之前。这种情况下,compareTo 返回这两个字符串在位置 k 处的两个不同的 char 值,即值: 

this.charAt(k)-anotherString.charAt(k) 


如果它们没有不同的索引位置,则较短字符串在字典顺序上位于较长字符串的前面。这种情况下,compareTo 返回这两个字符串长度的不同,即值: 

this.length()-anotherString.length() 
==========================
equals:equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
------解决方案--------------------
cmpareTo是比较大小的,常用于集合类里面的对象排序,实现一半是继承排序接口,另外就是自己写一个排序类。
equals方法是对象是否相同比较,它是Object里面就存在的方法,Object对equals的实现就是“==”,所以通常写类要求覆盖这个方法。
其实你用==也可以比较字符串的,当然和equals的比较不同。
------解决方案--------------------
equals是object里的方法,有的类对其进行重写,一般用来比较对象的值,如String;
而 == 是比较对象的引用地址是否一样;

compareTo 
按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object) 返回 true 时才返回 0。

equals
将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
------解决方案--------------------
关于equal 和 compareTo的比较,我想楼上几位说的很清楚了;
在这里要说一下==,楼主要注意,比较字符串的时候不要用==去比较,
不信你试试
String str1 = "hello";
String str2= "hello";

if(str1 == str2)
{
System.out.println("相等");
}

else
{
System.out.println("不相等");
}

结果肯定是不相等,因为你用==去比较两个字符串的时候,实际上比较的是这两个字符串的地址,肯定就不相等

==什么情况下适合呢,一句话,基本数据类型(int double float等)的比较
------解决方案--------------------
compareTo和equals方法的编写都需要遵循一定的规范,Java API Doc中有提到,楼主可以参考一下,相关的接口还有Comparator。
这两个方法的具体实现也是有一定的关联的,很多情况下,两个调用equals进行比较结果相同的对象,调用compareTo时则也应该返回0。
这样做大概是为了实现Java Collections Framework中的某些意图和规范吧。
------解决方案--------------------
compareTo最最 重要的是可以是Collections接口下的集合类来实现自动排序

例如list.sort();
会调用list中的对象compareTo方法来实现排序,ok,楼主结贴吧