理解 C# 中 == 和 Equals() 的区别
在 C# 中,您可能会遇到这种情况:使用 == 运算符比较两个字符串返回 false,而 Equals() 方法返回 true。要理解这种行为,必须掌握这些运算符的根本区别。
当用于对象时,== 运算符的值为 System.Object.ReferenceEquals。这意味着它检查两个字符串对象是否引用内存中的同一个对象。相反,Equals() 是一个虚方法,可以被自定义类型(包括字符串)重写。
对于字符串,使用 Equals() 的重写版本,它检查字符串的实际内容。因此,如果您比较两个具有相同字符但存储在不同内存位置的字符串,== 将返回 false,因为它们不是同一个对象引用,而 Equals() 将返回 true,因为它们的内容相等。
代码示例:
考虑以下代码片段:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack")) { // 执行代码 } if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack") { // 执行代码 }
在此代码中,这两个条件都将所选 ListBoxItem 的 Content 属性与字符串“Energy Attack”进行比较。虽然使用 Equals() 的第一个条件将计算为 true,但如果 Content 属性是一个新的字符串对象,则使用 == 的第二个条件可能会计算为 false。这是因为 == 运算符检查标识,而具有相同值的两个不同字符串对象并不相同。
因此,在 C# 中比较字符串相等性时,建议使用 Equals() 方法(它评估内容相等性),而不是 ==(它检查标识)。
以上是C#字符串比较:==何时与equals()有所不同?的详细内容。更多信息请关注PHP中文网其他相关文章!