string str和string str = null之间的区别

时间:2014-03-18 14:57:58

标签: c#

我想知道在声明变量时内部究竟发生了什么,如下所示:

string tr;

string tr = null;

在调试时,我注意到两个值都只显示为null。但是,如果在未初始化ref tr的情况下使用null,则会产生错误,而第二行则不会。

请帮我深入了解

3 个答案:

答案 0 :(得分:9)

您的第一个声明只是声明,您的第二个声明是声明+初始化。

string tr; // Just Declaration

string tr=null; //Declaration + Initialization. 

如果您尝试仅使用tr声明,则可能会出现编译时错误。 (第一种情况)例如:

string tr; // Just Declaration
if (tr == "")   //Use of unassigned local variable
{
}

将为ref关键字生成相同的错误,这需要为字段明确分配(声明+初始化)。但是,使用out关键字,您可以只使用声明,但该方法将负责确保将某个值分配给out参数。

答案 1 :(得分:6)

  

在调试时,我注意到两个值都显示为null   仅

这是正确的,因为stringreference type,所有引用类型的默认值都是null

但是C#编译器不允许使用未初始化的变量。

你的第一个例子只是一个变量声明。但是你的第二个是变量初始化。

这就是为什么如果你写;

string tr;
Console.WriteLine(tr);

你得到编译器错误,如;

  

使用未分配的局部变量'tr'

来自ref (C# Reference)

  

必须初始化传递给ref参数的参数   在通过之前

虽然传递为out arguments的变量不需要在传递之前进行初始化。

答案 2 :(得分:4)

compliler要求您明确地将null(或任何其他)值设置为变量。它不希望程序中出现任何误解和运行时错误,因此它会在使用之前轻轻推断出您可能没有初始化变量。

异常是使用带有out参数的方法(它本身保证初始化)作为未初始化的变量。