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由于是非安全代码的比较,所以效率要比我们用安全代码高得多。

时间: 2024-10-12 18:55:31

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

String的几种初始化方法的区别

参考了: java中String的两种初始化方法 ? String a; String aa = ""; String aaa = "123"; String b = new String(); String bb = new String(""); String bbb = new String("123"); String c = null; ? System.out.println(aa == bb);????????/

java中String的21种使用方法

(构造函数必须new出来) * public String (char[] vaue)                         将一个字符数组变成字符串(构造函数) * public String (char[] vaue,int offset,int count)    将制定范围内的字符数组变为字符串(构造函数) * public String (byte[],bytes)                        将一个byte数组变为字符串(构造函数) * public St

string类的两种实现方法及string的一些成员函数的实现

string的第一种实现方法: #include<iostream> using namespace std; class String { public:      String(char *str="")//构造函数       :_str(new char[strlen(str)+1])      {           strcpy(_str, str);      }      String(const String& str)//拷贝构造函数,实现深拷贝

从Java源码看String的两种比较方式

String的两种字符串比较方式 == 和 equals方法 ==: ==比较的是字符串在内存中的地址 代码示例: 1 public class EqualsDemo { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 String s1 = "String"; 8 String s2 = "String"; 9 String s3 = new String(&quo

C#WinForm 直接导出DataGridView数据到Excel表格的二种方法对比

方法一.利用微软的excel 操作类 引用:using Excel = Microsoft.Office.Interop.Excel; 代码如下:         #region导出数据表:Excle (微软的excel 操作类)         ///<summary>         ///导出数据表:Excle         ///</summary>         ///<param name="myDGV"></param>

【C++】int转换为string的两种方法(to_string、字符串流)

本文转自http://blog.csdn.net/chavo0/article/details/51038397 记录一下用到过的int转换成string的两种方法 第一种是to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数(这几个就是string转int,long,以及long long啦~) to_string这个函数还是很强大的! string to_stri

iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比

iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比 iphoneiPhoneIPhoneIPHONEIphone数据持久化 对比总结 本篇对IOS中常用的5种数据持久化方法进行简单对比总结 第1种:UserDefaults(iPhone开发[二十]数据持久化总结之第1篇—NSUserDefaults) 1)易用性很强 2)数据存储在.plist文件中 3)一般保存 配置信息,首选项信息.缓存数据等,适用存储较少量数据的情况 4)缺点:无法将自定义对象序列化到属性列表中第2种:属性

react系列-事件绑定的几种方法对比

前言 本文主要给大家介绍了关于React事件绑定的几种方法对比的相关呢荣,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. React事件绑定 由于类的方法默认不会绑定this,因此在调用的时候如果忘记绑定,this的值将会是undefined. 通常如果不是直接调用,应该为方法绑定this.绑定方式有以下几种: 1. 在构造函数中使用bind绑定this ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Button extends

011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List&lt;Map&lt;String,String&gt;&gt;的8种方法

一.JSON数据格式 1.1.常用JSON数据格式 1.对象方式:JSONObject的数据是用 { } 来表示的, 例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null } 2.数组方式:JSONArray,顾名思义是由JSONObject构成的数组,用