字符串声明和设置字符串之间的区别是什么?

时间:2013-02-05 19:53:22

标签: c#

我知道这是一个愚蠢的问题,但仍然想知道这两者之间的区别(我理解字符串a =“”与字符串a = null的区别):

string a; 
string a = null;

3 个答案:

答案 0 :(得分:3)

对于局部变量,第一种形式只是声明变量,第二种形式是声明和分配。变量上的大多数操作(如使用输入参数调用方法或从方法返回)都要求用作参数的变量已分配

string a;
MethodThatTakesAString(a); // compile time error: use of unassigned local variable 'a' !

请注意,out参数没有该要求,编译器认为在方法调用后要分配a

string a;
MethodThatGivesAString(out a);

可以找到更多信息here

答案 1 :(得分:2)

答案取决于所述声明的范围:在本地范围内,第一个变量是未分配的,而第二个变量是分配的:

void foo() {
    string a;
    if (CheckUserInput()) {
        a = "Bar";
    }
    Console.WriteLine(a); // << Error
}

VS

void foo() {
    string a = null;
    if (CheckUserInput()) {
        a = "Bar";
    }
    Console.WriteLine(a); // << Correct
}

在班级范围内,没有区别:

class X {
    string a;
}

class Y {
    string a = null;
}

在这两种情况下a都以null开头。

答案 2 :(得分:1)

第一行只是声明了一个字符串但是没有初始化。如果您尝试使用该字符串,例如:

string b = a + " says howdy";

...您将收到编译错误,告诉您正在尝试使用未初始化的变量。

然而,第二行将变量初始化为一个值(null,这实际上是一个标识符,表示“没有值”,但是以不同的方式。至少编译器知道你明确地说“嘿,这个变量没有价值“而不是只是把它留在空中。”