1:要判断2个字符串变量是否相等,最高效的方法是看它们是否指向相同的内存地址。前面使用RefernceEquals方法来比较。如果2个变量指向的是不同的内存地址,那么就需要逐字符的比较2个字符串的变量,才能确认它们是否相等。由于逐字比较会花费大量的时间,降低性能。所以.NET提供了String.Equals方法来优化比较过程该方法能自动地完成引用比较和值比较。

string str1="abc";

string str2="abc";

string str3=String.Copy(str2);

string str4="abc";

Console.WriteLine(String.Equals(str1,str2)); //true;

Console.WriteLine(str1.Equals(str3));        //true;

Console.WriteLine(str1 == str3);             //true;

Console.WriteLine(str1 == str4);             //false;

其实“==”操作符,它实际上在底层是调用Equals方法,这是完成比较的一种简捷方式。虽然Equals方法已经满足了大多数的比较的需要,但是此方法没有重载方法,不支持区分大小写,和考虑每个国家的文化因素

  • 2

    2:String.Compare是一个比较灵活的比较方法,由于考虑到大小写或文化因素,就可以使用此方法。因为它有许多重载的形式,可以接受大小写或文化的参数,也支持子串比较。

    语法如下;

    int Compare(string str1,string str2);//指定要比较的字符串;

    Compare(string str1,string str2,bool IgnoreCase);//bool IgnoreCase默认为false,如果是true,则不区分大小写的比较。

    Compare(string str1,string str2,bool IgnoreCase,CulureInfo ci);//CulureInfo ci,要使用的文化。

    Compare(string str1,int index1,string str2,int index2,int len);//index1和index2分别表示str1和str2的起始位置。

    Compare返回一个表示比较结果的整数值,两个字符相同,则返回0;如果第一个字符串小宇第二个字符串,则返回小于0;如果第一个字符串大于第二字符串,返回值大于0;

    int result;

    string str1="ABC";

    string str2="abc";

    result=string.Compare(str1,str2);//返回1,因为A比a大;

    result=string.Compare(str1.str2,false);//返回1,区分大小写;

    result=string.Compare(str1,str2,ture);//返回0,不区分大小写;

    在编写程序是,要考虑的文化因素影响。.NET给各种文化的分别提供了一组准则,在执行Compare方法时,CLR会检查相关文化,并使用相对应的准则。Compare方法提供了一个CultureInfo对象参数。

    CultureInfo ci = new CultureInfo("cs-cz");

    要明确的指定一个默认文化或者无文化信息,CultureInfo类提供了2个成员属性,CurrentCulture(当前线程相关文化)和InvariantCulure(忽略文化因素),可以作为参数传递给方法。这样使得程序具有自描性,可以清楚的这些方法是否受到文化的影响。

  • 3

    3:String.CompareOrdinal是对严格基于字符的序数值完成比较。它其实是使用一种简单的算法来比较2个字符串的Unicode值。如果第一个字符串小于第二个字符串,则返回小于0;如果是2个字符串相等,返回0;如果第一个字符串大于第二字符串,则返回大于0的值。

    string str1=“Abc”;

    string str2=“abc”;

    result=string.Compare(str1,str2,false,CultureInfo.InvariantCulture);//返回1,A比a大,不受文化影响。

    result=string.CompareOrdinal(str1,str2);返回负数-20。因为CompareOrdinal比较的是底层的Unicode值。A(U+0041)小于a(U+0061),所以第一个字符串小于第二个字符串。

深入解析字符串的比较方法:“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。的更多相关文章

  1. C#基础知识之字符串比较方法:“==”操作符;RefernceEquals;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。

    一.“==”操作符:String.Equals:ReferenceEquals 方法 1.在编程中实际上我们只需要这两种比较,c#中类型也就这两种 (1)值类型的比较:一般我们就是判断两个值类型实例各 ...

  2. java基础18 String字符串和Object类(以及“equals” 和 “==”的解析)

    一.String字符串 问:笔试题:new String("abc")创建了几个对象?答:两个对象,一个对象是 位于堆内存,一个对象位于字符串常量池 class Demo17 { ...

  3. HDU 4668 Finding string (解析字符串 + KMP)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出一个压缩后的串,以及一个模式串,问模式串 ...

  4. 【spring boot】spring boot 前台GET请求,传递时间类型的字符串,后台无法解析,报错:Failed to convert from type [java.lang.String] to type [java.util.Date]

    spring boot 前台GET请求,传递时间类型的字符串,后台无法解析,报错:Failed to convert from type [java.lang.String] to type [jav ...

  5. mybatia的mypper.xml文件,参数类型为map,map里有一个键值对的值为数组,如何解析,例子可供参考,接上文,发现更简便的方法,不必传数组,只需传字符串用逗号隔开即可

    是这样的 先看参数 map.put("orgId", "1818"); map.put("childDeps", "1000,10 ...

  6. ACEXML解析XML文件——我是如何学习并在短时间内掌握一个库的使用方法的

    最近做的C++项目中需要使用xml文件保存一些信息,程序启动时会读取这些信息.最终经过主程的评测,决定使用ACEXML库来读取解析XML文件. 好吧,至于为什么选择ACEXML库,我就不说了.既然选择 ...

  7. C#、.Net代码精简优化(空操作符(??)、as、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()、string.Equals()、System.IO.Path 的用法)

    一.空操作符(??)在程序中经常会遇到对字符串或是对象判断null的操作,如果为null则给空值或是一个指定的值.通常我们会这样来处理: .string name = value; if (name ...

  8. JavaScript之字符串、对象及操作符

    字符串-String 字符串就是字符序列. 字符串中,有些特殊字符,叫做字面量,常见的字面量如下表: 判断字符串长度使用length属性 text.length; 字符串拼接 var a = 'Jav ...

  9. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

随机推荐

  1. HTTP 错误 404.2 解决方案

    HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面 详细错误:HTTP 错误 404.2 - Not Found ...

  2. 转:浅谈大型web系统架构

    浅谈大型web系统架构 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应 ...

  3. CSS3.0动画之hover---Y轴----3D旋转

    div#div2{display: table; width: 100%; height: 100%; text-decoration: none; outline: none; -webkit-tr ...

  4. JavaScript的语法要点 3 - Calling Context

    上一篇讲了JavaScript的Scope Chain - 每一个函数都有一个scope chain与之关联,scope chain上有第一个对象维护着本地变量作为其属性.另外我们在JavaScrip ...

  5. undefined local variable or method ‘xxx’ for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xbc88d6c>错误解决方案

    官方文档如下: https://github.com/rspec/rspec-rails/blob/master/Capybara.md Capybara 2.0 To use Capybara 2. ...

  6. Windows 8.1 (64bit) 下搭建 MongoDB 2.4.9 环境

    一.下载MongoDB 2.4.9版 进入MongoDB官方网站的下载页面. 找到Windows 64-bit版的下载链接进行下载. 二.安装MongoDB 2.4.9版 将下载的文件解压到任意目录. ...

  7. 用CSS3写的小案例-图片缩放隐藏内容显示

    思路分析 (1).搭建界面 (2).鼠标移到图片的时候,放大显示 (3).鼠标移入到当前的li标签里面找到后面的div让其显示出来 <!DOCTYPE html> <html lan ...

  8. php下删除一篇文章生成的多个静态页面

    php自定义函数之删除一篇文章生成的多个静态页面,可能有多页的文章,都是需要考虑到的. 复制代码代码如下: //– 删除一篇文章生成的多个静态页面  //– 生成的文章名为 5.html 5_2.ht ...

  9. 《Visual C++ 程序设计》读书笔记 ----第8章 指针和引用

    1.&取地址:*取内容. 2.指针变量“++”“--”,并不是指针变量的值加1或减1,而是使指针变量指向下一个或者上一个元素. 3.指针运算符*与&的优先级相同,左结合:++,--,* ...

  10. (转)linux性能优化总结

    感谢博客http://sillycat.iteye.com提供的资料 linux性能检查(一)介绍和CPU 通常监控的子系统有: CPU Memory IO Network 应用类型 IO相关,处理大 ...