不同的字符串比较方法有啥区别[重复]

Posted

技术标签:

【中文标题】不同的字符串比较方法有啥区别[重复]【英文标题】:What is difference between different string compare methods [duplicate]不同的字符串比较方法有什么区别[重复] 【发布时间】:2011-09-01 11:39:53 【问题描述】:

可能重复:Differences in string compare methods in C#

在.NET中有很多字符串比较方法,我只是想确认哪个是最好的考虑性能。

string.Equals()

string.Compare()

string.CompareTo()

string.CompareOrdinal()

string.ReferenceEquals()

if (str1 == str2)

【问题讨论】:

我想这已经被问过了...... 不是一个完整的答案,但要注意a.Equals(b),如果a 是null 那么它会抛出一个NullReferenceException,而a == b 不会。 这似乎与以下问题相同:***.com/questions/44288/… 要添加那里给出的答案,您还可以查看 Jon Skeet 的blogs.msdn.com/b/csharpfaq/archive/2004/03/29/… 顺便说一句:"ABC".Equals(abc_string) 比 abc_string.Equals("ABC") 更安全 这不是标记问题的副本。另一个问题根本没有提到 CompareOrdinal,答案也没有。 【参考方案1】:

来自msdn

string.Equals

判断此实例与指定对象(也必须是String对象)是否具有相同的值。

string.Compare 比较两个指定的 String 对象并返回一个整数,表示它们在排序顺序中的相对位置。

string.CompareTo 将此实例与指定对象或字符串进行比较,并返回一个整数,指示此实例在排序顺序中是在指定对象或字符串之前、之后还是出现在相同位置。

string.CompareOrdinal 通过计算每个字符串中对应 Char 对象的数值来比较两个指定的 String 对象。

String equality operators 预定义的字符串相等运算符是:

布尔运算符 ==(字符串 x, 字符串 y); 布尔运算符!=(字符串 x,字符串 y); 当下列条件之一为真时,两个字符串值被认为是相等的:

这两个值都是空的。 这两个值都是对在每个字符位置具有相同长度和相同字符的字符串实例的非空引用。 字符串相等运算符比较字符串值而不是字符串引用。当两个单独的字符串实例包含完全相同的字符序列时,字符串的值相等,但引用不同。如第 7.9.6 节所述,引用类型相等运算符可用于比较字符串引用而不是字符串值。

【讨论】:

谁能给我解释一下When two separate string instances contain the exact same sequence of characters, the values of the strings are equal, but the references are different. @VinodSrivastav John Smith 出生于 1980 年 1 月 1 日。另一个叫 John Smith 的人出生于 1999 年 12 月 29 日。两个不同的人,但名字完全相同。这就是两个单独的字符串具有相同字符但引用不同的原因。

以上是关于不同的字符串比较方法有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby:比较级之间有啥区别:“||”和“或” [重复]

书里说用equals来比较,但是用==也没问题啊,比较结果是一样的,请教一下有啥区别呢?

休息与肥皂有啥区别[重复]

String 的compare比较方法返回值有啥含义

java 定义字符串 String a=new String("aaabbb");和String a="aaabbb";有啥区别啊?

比较对象类型时 typeof 和 is 有啥区别? [复制]