2017-04-21 21 views
1

我在做一個任務,我應該找到一些錯誤。代碼如下:什麼是未分配變量的值(空VS 0)

int num, num2;    
num = Convert.ToInt32(Console.ReadLine()); 
int answer = num + num2; 

我的回答是,num2應分配的值,然後才能使用它,它的值是"null"的時刻。 老師說這是錯誤的答案,並且num2的值是0. 誰是對的?爲什麼?如果num2的值真的是0(默認情況下),那麼我可以操作它(然後做一些數學運算等),但是我不能,因爲存在錯誤,所以它意味着它不能爲0! 那麼,num2的值是多少?

+3

代碼無法編譯,所以沒有變量* ever *具有運行時值。 – David

+1

編譯器不允許你編譯這個。在給定值之前,num2不能使用。 – Amy

回答

0

int是一個值類型,所以它不能爲空。

6

沒有錯,既沒有你的老師,也沒有你的老師,因爲num2是一個局部變量,它不能使用,直到初始化。你會得到一個編譯器錯誤「使用未分配的本地變量」

如果它是一個字段,那麼它的默認值將是0.它不能是null,因爲它是一個值類型。

+0

我沒有想到的是在觀察窗口中的一行'int x;'顯示爲'0'。 –

4

你倆都是錯的。

我的答案是,在可以使用num2之前,它應該被分配一個值,並且它的值現在是「null」。

你的第一部分是正確的,但你的第二部分是不正確的。 int永遠不可能是nullint的默認值爲0但是,由於變量從來沒有被賦予一個值(甚至不是它的默認值),因此編譯器本身不允許編譯代碼。

由於代碼從未編譯過,它從不運行。而且由於它永遠不會運行,因此沒有變量具有任何價值。

老師說,這是錯誤的答案,NUM2的值爲0

老師忽視了一個事實,即代碼沒有在第一時間編譯。對於一個int 默認值將0,在像類屬性的情況下:

class MyClass 
{ 
    public int SomeInt { get; set; } 
} 

MyClass任何構造的情況下,SomeInt將有0值。但對於本地聲明的變量,編譯器要求爲該變量分配一個值。提供的代碼沒有通過該要求。