面试问题(C#中)

use*_*502 0 java c#-3.0 c#-4.0

所以我给了一个小程序写,我做得很好,但后来我被问到以下,我有点困惑.

以下是什么价值?

//我告诉他们他们会因为没有初始化而得到错误,所以他们指向内存中的某个地址......

int a;
Object b;
int d = a;
bool c; 
Run Code Online (Sandbox Code Playgroud)

如果在Java中,用最后一行替换

boolean c;
Run Code Online (Sandbox Code Playgroud)

请让我知道正确答案,因为我相信它会再次提起.谢谢 :)

SLa*_*aks 6

.Net CLR将所有字段和本地值初始化为其默认值.
在你的情况,那是0,nullfalse.

但是,此代码在任何情况下都不会编译.

在方法内部,C#将不允许您使用未初始化的本地,因此d = b不会编译.
作为实例字段,C#不允许您this在构造函数内部使用,因此d = a不会在字段初始值设定项中进行编译.

作为静态字段,这将编译,但static缺少关键字.


在Java中,所有这些都是正确的,除了Java允许您this在字段初始化器中使用.
因此,此代码在Java中作为实例字段有效.