您的位置:首页 > 其它

String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)

2017-09-22 23:12 621 查看
String类字符串比较大概有4种方法:Compare(),CompareTo(), CompareOrdinal()和Equals(). Compare()方法是CompareTo()的静态版本.而Equals()与"=="是等价的,只要使用"=="运算符,就会调用Equals()方法.CompareOrdinal()对两个字符串进行比较,不考虑本地化语言和文化。

测试比较代码:

[csharp]
view plain
copy

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 = 
4000
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由于是非安全代码的比较,所以效率要比我们用安全代码高得多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: