首页 > 后端开发 > C++ > C# 中的字符串比较:何时'String.Equals()”和'==”可以互换?

C# 中的字符串比较:何时'String.Equals()”和'==”可以互换?

Barbara Streisand
发布: 2025-01-22 11:31:12
原创
587 人浏览过

String Comparison in C#: When Are `String.Equals()` and `==` Interchangeable?

C# 字符串比较的困惑:String.Equals() 方法和 == 运算符是否可互换?

在 C# 中,字符串比较有时会产生令人意外的结果。一个常见的问题是 String.Equals() 方法和 == 等号运算符的行为是否完全相同。

考虑以下代码片段:

<code class="language-csharp">string s = "Category";
TreeViewItem tvi = new TreeViewItem();
tvi.Header = "Category";

Console.WriteLine(s == tvi.Header); // false
Console.WriteLine(s.Equals(tvi.Header)); // true
Console.WriteLine(s == tvi.Header.ToString()); // true</code>
登录后复制

尽管 stvi.Header 都包含相同的值 "Category",但 == 运算符返回 false,而 String.Equals() 方法返回 true。这就提出了一个问题:为什么这两种比较方法会产生不同的结果?

String.Equals()== 之间的关键区别

String.Equals()== 运算符之间有两个根本区别:

  1. 类型特定实现:== 运算符根据对象的编译时类型进行比较,而 String.Equals() 是多态的,这意味着它的实现取决于被比较对象的运行时类型。
  2. 空值处理:== 运算符在比较空引用时不会抛出异常,而 String.Equals() 如果任何一个参数为空,则会抛出 NullReferenceException 异常。

演示差异的示例

为了说明这些差异,考虑以下代码:

<code class="language-csharp">object x = new StringBuilder("hello").ToString();
object y = new StringBuilder("hello").ToString();

if (x.Equals(y)) // True

if (x == y) // False</code>
登录后复制

尽管 xy 值相同,但 == 运算符返回 false,因为它根据对象的编译时类型(object)进行比较,而这些类型是不同的。为了获得正确的比较,必须将对象显式转换为适当的类型(在本例中为 string)。

<code class="language-csharp">string xs = (string)x;
string ys = (string)y;

if (xs == ys) // True</code>
登录后复制

结论

虽然 String.Equals()== 运算符通常可以互换使用,但了解它们在实现和空值处理方面的细微差别非常重要。为了确保可靠一致的字符串比较,通常建议使用 String.Equals() 方法,尤其是在比较不同类型的对象或处理空引用时。

以上是C# 中的字符串比较:何时'String.Equals()”和'==”可以互换?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板