【问题标题】:'==' vs string.equals c# .net [duplicate]'==' vs string.equals c# .net [重复]
【发布时间】:2011-08-13 08:41:10
【问题描述】:

可能重复:
C#: String.Equals vs. ==

大家好。

曾经有人告诉我,你不应该用 == 比较字符串,你应该使用 string.equals(),但它指的是 java。

¿.NET c# 中 == 和 string.equals 的区别是什么?

【问题讨论】:

    标签: c# .net equals-operator


    【解决方案1】:

    string == stringString.Equals 完全相同。这是确切的代码(来自 Reflector):

    public static bool operator ==(string a, string b)
    {
        return Equals(a, b); // Is String.Equals as this method is inside String
    }
    

    【讨论】:

    • 那么,我可以说 == 的性能不如 equals 吗?
    • @Daniel GR 不,即时编译器将内联小方法,所以不用担心 :) 如果 JIT 编译本身的时间增加非常小,你不应该担心这个;)
    【解决方案2】:

    在 C# 中没有区别,因为运算符 ==!= 已在字符串类型中重载以调用 equals()。看到这个MSDN page

    【讨论】:

      【解决方案3】:

      == 实际上最终会在字符串上执行 String.Equals。

      可以在使用 String.Equals 时指定一个 StringComparision....

      例子:

      MyString.Equals("TestString", StringComparison.InvariantCultureIgnoreCase)
      

      大多数情况下,我认为这是一种编码偏好。使用您喜欢的任何一个。

      【讨论】:

        【解决方案4】:

        查看here 以获得更好的描述。正如一个答案所述

        当 == 用于对象类型时,它会解析为 System.Object.ReferenceEquals。

        Equals 只是一个虚方法 行为如此,因此被覆盖 将使用版本(其中,对于 字符串类型比较内容)。

        【讨论】:

          【解决方案5】:

          == 运算符调用String.Equals 方法。所以充其量你正在保存一个方法调用。反编译代码:

          public static bool operator ==(string a, string b)
          {
            return string.Equals(a, b);
          }
          

          【讨论】:

            【解决方案6】:

            没有区别,它只是一个运算符重载。对于字符串,它在内部是一样的。 但是,您不想养成使用 == 来比较对象的习惯,这就是为什么不建议将它也用于字符串的原因。

            【讨论】:

              【解决方案7】:

              在 C# 中,字符串没有区别。

              【讨论】:

                【解决方案8】:

                如果您不关心字符串的大小写,也不担心文化意识,那么它是一样的......

                【讨论】:

                  猜你喜欢
                  • 2015-08-02
                  • 2020-10-30
                  • 2014-04-18
                  • 1970-01-01
                  • 2022-01-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多