String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
来源:互联网 发布:javascript实战视频 编辑:程序博客网 时间:2024/06/11 10:33
String类字符串比较大概有4种方法:Compare(),CompareTo(), CompareOrdinal()和Equals(). Compare()方法是CompareTo()的静态版本.而Equals()与"=="是等价的,只要使用"=="运算符,就会调用Equals()方法.CompareOrdinal()对两个字符串进行比较,不考虑本地化语言和文化。
看测试比较代码:
const int Num = 10000000; string s1 = "abcdefgh"; string s2 = "abcdefgh"; //string s1 = "abcdefgh"; //string s2 = "amklklkl"; int end; //Compare int start = Environment.TickCount; for (int i = 0; i < Num; i++) { string.Compare(s1, s2); } end=Environment.TickCount; Console.WriteLine("Compare : " + (end - start)); //CompareTo start = Environment.TickCount; for (int i = 0; i < Num; i++) { s1.CompareTo(s2); } end = Environment.TickCount; Console.WriteLine("CompareTo : " + (end - start)); //CompareOrdinal start = Environment.TickCount; for (int i = 0; i < Num; i++) { string.CompareOrdinal(s1, s2); } end = Environment.TickCount; Console.WriteLine("CompareOrdinal : " + (end - start)); //静态Equals start = Environment.TickCount; for (int i = 0; i < Num; i++) { string.Equals(s1, s2); } end = Environment.TickCount; Console.WriteLine("静态Equals : " + (end - start)); //实例Equals start = Environment.TickCount; for (int i = 0; i < Num; i++) { s1.Equals(s2); } end = Environment.TickCount; Console.WriteLine("实例Equals : " + (end - start));其中,s1和s2分相等和不相等两种情况. 看结果:
1、Compare会通过传递进来的文化信息来调用对应的比较,CompareTo则会调用与当前线程相关联的文化信息,这就意味着,如果我们进行国际化的时候,字符串比较必须使用String.Compare静态方法。而且Compare方法因为是静态的,要比CompareTo快一些,因为建议尽可能地使用String.Compare方法来代替CompareTo方法!。
2.CompareOrdinal是将整个字符串每5个字符(10个字节)分成一组,然后逐个比较,找到第一个不相同的ASCII码后退出循环。并且求出两者的ASCII码的差。不过我很费解的是微软为什么要把这个实现的如此麻烦。但是在CLR via C#上有这样的话:这个方法比其他方法都要快。我想应该是有一定道理的吧。
所以当我们比较大小的时候,尽量使用CompareOrdinal方法。
3.Equals由于是非安全代码的比较,所以效率要比我们用安全代码高得多。
- String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
- String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
- String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
- hashcode、equals和compareTo、compare方法的意义及作用
- bigDecimal的比较方法 equals和compareTo
- String的几种比较方法耗时对比
- java中compareTo()和compare()方法的比较
- String类下compareTo()与compare()方法
- 【转】java ==、equals、compareTo、compare、sort在比较上的应用
- String 的 compareTo() 方法
- 对象的比较,排序,重写equals(),compareTo(),hashCode()方法
- Java String compare to determine Equality(Java String类型比较的三种方法)
- BigDecimal比较大小equals和compareTo方法
- String的CompareTo方法
- String 的 compareTo 方法
- String的compareTo方法
- String的compareTo()方法
- String的compareTo方法
- Oracle中的替换变量,&变量名,&&变量名
- ORACLE 11G EM 配置方法
- ARM架构下LDR、STR、MOV和伪指令LDR指令理解
- 教你如何使用强大的adb工具,解决你最头疼的问题!
- Win7与虚拟机VMware下运行的UBUNTU10.10共享文件夹
- String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
- 和CFStringRef相关的CFSTR与和NSString相关的@
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- from a left join b on , from a right join on b,from a inner join b on 用的心得
- Apple Push Notification Services Tutorial: Part 1/2
- LINQ标准查询操作符(一)——select、SelectMany、Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse
- 新浪微博开发(七)Oauth类
- linux下如何在终端上运行和安装可执行文件
- 新浪微博开发(八)oauthHelper类