int x = 6;
它有效,但
Int32 x = new Int32(6);
没有。 为什么Int32的默认构造函数无参数? 如何将6分配给x?
编辑: 更多解释.. https://referencesource.microsoft.com/#mscorlib/system/int32.cs,225942ed7b7a3252第38行:
internal int m_value;
编译器如何为此m_value分配6? Int32的构造函数是无参数的。
答案 0 :(得分:3)
如何将6分配给
x
?
6
,文字,已经是整数。该语言的设计方式是语法中有文字表达式,它们由编译器直接解释。
普通6
是一个整数文字,并且已经对应一个值为6的Int32
对象。编译器实际上不需要为文字调用构造函数,但可以直接创建对象。根据类型,可能有不同的文字用于不同的文字。例如,字符串文字"foo"
也使编译器直接创建值为“foo”的字符串对象。
请注意,这对C#及其打字系统来说并不特别。因此,Int32
是否为值类型实际上并不重要(String
甚至不是值类型,并且仍然有文字。)
答案 1 :(得分:2)
x = 6;
编译后:
IL_0001: ldc.i4.6
IL_0002: stloc.0
因此,您可以看到.NET具有从文字创建整数值的指令。它是在引擎盖下完成的。
ldc.i4.6创建“6”并将其放在堆栈顶部。 (实际上是创建整数值)
stloc.0将堆栈顶部的值复制到变量x