String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
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)的更多相关文章
- C# String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
		
原文:http://blog.csdn.net/wushang923/article/details/7527499 注意点:切换方法的时候要注意返回值引起的变化!!! 1.Compare会通过传递进 ...
 - String的几种初始化方法的区别
		
参考了: java中String的两种初始化方法 String a; String aa = ""; String aaa = "123"; String ...
 - Hashtable类中的四种遍历方法对比
		
要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...
 - redis两种持久化方法对比分析
		
1.前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能, ...
 - Redis(十二):redis两种持久化方法对比分析
		
前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数 ...
 - java中String的21种使用方法
		
(构造函数必须new出来) * public String (char[] vaue) 将一个字符数组变成字符串(构造函数) * public Stri ...
 - 几种Robust方法对比
		
1.Mean Absolute Deviation http://mathbits.com/MathBits/TISection/Statistics1/MAD.html 2.Median Absol ...
 - 【java】StringBuilder的三种清除方法对比
		
参考链接:https://blog.csdn.net/roserose0002/article/details/6972391
 - C语言清空输入缓冲区的N种方法对比
		
转自C语言清空输入缓冲区的N种方法对比 C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int get ...
 
随机推荐
- Docker和DevOps是找工作必备技能
			
根据最近的IT Jobs Watch数据,涉及Docker技术的的工作角色上升了317名次,排在500个最受追捧的IT技能第二位.无独有偶,从Rackspace最近的研究表明,Docker和DevOp ...
 - Vue.js——webpack
			
Vue.js——60分钟webpack项目模板快速入门 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开 ...
 - 如何使用沉浸式状态栏,让你的app风格更好看
			
大家都知道,传统的手机状态栏非黑即白,经常让整个app显得不是那么的好看,如何让状态栏的颜色跟你整个界面的颜色能够融为一体,这是我们一直想要的,现在给大家展示一下: 由图可见,第一张是没有使用沉浸式状 ...
 - 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap   good
			
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
 - windows 下面的内存泄漏排查.
			
内存泄漏排查 一下本人只是简单的介绍一个实用, 如果读者很感兴趣, 可以查阅msdn自己去深入调查相关的API和原理. API 介绍 1. 马上打印泄漏信息:_CrtDumpMemoryLeaks() ...
 - 判断变量是否存在(python)
			
var = 1 # print True print 'var' in dir() # print False print 'va' in dir() # work for list , dict t ...
 - AppStore被拒原因及总结
			
4.5 - Apps using background location services must provide a reason that clarifies the purpose of th ...
 - 校园招聘 - 比較easy的面试题
			
又到校园招聘的季节了, 自从和一些同事出版了<编程之美>一书之后, 我常常收到一些关于面试, 编程, 和"题库"的询问. 事实上我自己对算法没有什么研究, 有些问题都 ...
 - 某IT校招笔试
			
前言 博主明天上午9点还有面试,今天突然看到某大牌IT公司笔试题目,必须做一下了 题目 1.假设把整数关键码K散列到N个槽列表,以下哪些散列函数是好的散列函数 A: h(K)=K/N; B: h(K) ...
 - jquery表格可编辑修改表格里面的值,点击td变input无刷新更新表格
			
td点击后变为input可以输入,更新数据,无刷新更新 演示 XML/HTML Code <table border="0" cellpadding="0" ...