【发布时间】:2010-05-28 13:19:25
【问题描述】:
只是好奇。
如果你去:
string myString;
它的值为空。
但如果你去:
int myInt;
这个变量在C#中的值是多少?
谢谢
大卫
【问题讨论】:
-
一个简单的测试就足够你自己回答了。
-
我认为答案的质量已经证明了问题的价值。
标签: c# non-nullable unassigned-variable
只是好奇。
如果你去:
string myString;
它的值为空。
但如果你去:
int myInt;
这个变量在C#中的值是多少?
谢谢
大卫
【问题讨论】:
标签: c# non-nullable unassigned-variable
首先,请注意,这仅适用于字段,而不适用于局部变量 - 至少在 C# 中,它们在分配之前无法读取。实际上,如果您设置了适当的标志,CLR 会将堆栈帧初始化为 0 - 我相信这是默认设置。但它很少被观察到 - 你必须经历一些令人毛骨悚然的黑客攻击。
int 的默认值是 0 - 对于任何类型,它本质上是由一个全零的位模式表示的值。对于值类型,这相当于调用无参数构造函数,对于引用类型,这是 null。
基本上,CLR 用零擦除内存。
这也是default(SomeType)为任何类型给出的值。
【讨论】:
int 的默认值为 0
【讨论】:
int 的默认值为 0。
在此处查看每种类型的默认值的完整列表:http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx
【讨论】:
下面是 C# 中值类型的默认值表: http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx 引用类型默认值通常为 null。
【讨论】:
String 是一种引用类型。 Int 是一种值类型。引用类型只是指向堆的堆栈上的指针,它可能包含也可能不包含值。值类型只是堆栈上的值,但它必须始终设置为某个值。
【讨论】:
T 类型的未初始化变量的值始终为 default(T)。对于所有引用类型,这是 null,对于值类型,请参阅 @Blorgbeard 发布的链接(或编写一些代码来检查它)。
【讨论】: