String.Empty和“”和null之间有什么区别?

时间:2009-06-22 16:27:40

标签: c# .net

  

可能重复:
  What is the difference between String.Empty and “”

""是否等同于String.Empty

首选字符串值是首选吗?

8 个答案:

答案 0 :(得分:27)

public sealed class String {
    //...
    public static readonly String Empty = "";
    //...
}

如果您想表示没有值,请使用null;

如果要表示存在值,请使用String.Empty,但该值为空字符串。

答案 1 :(得分:10)

String.Empty因为它是一个静态变量,而不是“”必须创建一个新字符串,而null意味着你必须将字符串设置为等于一个新的字符串实例。

(感谢更正)

答案 2 :(得分:8)

是。和String.Empty,但请don't worry about it

  

String.Empty和“”之间的区别非常小,但有一个   区别。 “”实际上创造了一个   对象,它可能会被拉出字符串实习池,而String.Empty不会创建任何对象,所以如果你真的在寻找终极   内存效率,我建议String.Empty。   但是,你应该记住差异是如此微不足道   从来没有在你的代码中看到它......

答案 3 :(得分:6)

使用您认为最具可读性的。

我挑战任何人找到一个现实应用程序,其中存在显着的性能差异......它不会发生。但是,不同的人发现不同的方法更具可读性。

就个人而言,我是""人。我发现它不那么杂乱,我从来没有遇到过一个问题,即我实际意外地使用了" "(或类似的东西)。 (这是经常提出的反对意见之一。)

如果您更喜欢string.Empty,我肯定不会声称您“错”。但是,我建议,如果你在一个团队工作,你会讨论它,以找出大多数人认为更具可读性的东西,并坚持这一点。一致性通常是一件好事。

编辑:只是为了消除一些可能由“”创建新字符串......“ 创建一个新字符串一次的声明引起的恐惧(可能每AppDomain,可能每个进程;我不确定,真的无关紧要)。每次使用它时都不会创建一个新字符串。例如,请考虑以下代码:

public void Foo()
{
    string x = "";
    for (int i=0; i < 10000000; i++)
    {
        string y = "";
        // Do something here
    }
    string z = "";
}

我们保证xyz会引用相同的字符串。最多,调用Foo将意味着创建一个空字符串,并且仅在您第一次调用它时,并且仅当您尚未在程序中的任何其他地方使用空字符串文字时。上面的代码将创建1000万个新字符串。

答案 4 :(得分:4)

使用string.Empty被认为是更好的做法,但它们实际上是相等的。但是,它们与null不同。

答案 5 :(得分:1)

http://msdn.microsoft.com/en-us/library/system.string.empty.aspx

此字段的值是零长度字符串“”。

在应用程序代码中,此字段最常用于分配以将字符串变量初始化为空字符串。要测试字符串的值是否为String .. ::。Empty,请使用IsNullOrEmpty方法。

答案 6 :(得分:1)

他们是平等的。但是String.Empty是不变的。

“” - 是创建String的方法。

答案 7 :(得分:1)

你要找的答案就在这里。

What is the difference between String.Empty and "" (empty string)?

使用String.Empty