2011-10-30 101 views
4

之間有什麼區別:沒有什麼設置一個值0以及.NET中variable = 0和variable = nothing之間的區別是什麼?

Dim intVal as integer 
intVal = 0 

intVal = nothing 

我已經從MSDN閱讀:

從MSDN:

Public Structure testStruct 
    Public name As String 
    Public number As Short 
End Structure 
Dim ts As testStruct, i As Integer, b As Boolean 
ts = Nothing 
' The preceding statement sets ts.name to "" and ts.number to 0. 
i = Nothing 
b = Nothing 
' The preceding statements set i to 0 and b to False. 
+0

其效果相同 – Racooon

回答

7

通常不用於對象引用,如果將它分配給值類型,則使用默認值對其進行初始化。在.NET世界中,默認值只是一個充滿零的內存塊。 因此,分配給Nothing的整數將爲0,分配給Nothing的結構將是一個由零填充的結構。

空引用是一種特殊的引用,這意味着,沒有提及,並表示,的確,與所有零的指針。

在C#中,你可以使用default(TYPE)來獲得同樣的結果,它是用來分配零到任何你想要的。

字符串是引用類型,對象,那麼字符串將不會被分配到「」,但沒什麼,字符串是不是值類型。

Dim s as String 
s = Nothing 

Console.WriteLine Object.ReferenceEquals(s, Nothing) ' Will print true 
Console.WriteLine Object.ReferenceEquals(s, "") ' Will print false 

字符串仍引用類型,所以當你把它分配給無你會參考設置爲零。

3

在.Net中,Integer是一個值類型,因此不能爲空。

如果創建整數類型的變量,不分配給它,這將是0,因爲語言的工作方式。

現代計算中一些最令人煩惱的/流行的錯誤是由未初始化的變量引起的,因此.Net團隊決定確保所有的值類型不會遭受這個問題。

這是慣例,雖然假設編譯器/ JIT將解決這些變量爲整數或假布爾已知值,例如0,所以你應該總是用你的第一個例子壞。

但要清楚地回答你的問題,沒有區別,但最好使用第一個示例。

3

沒有是一種特殊的文本表示變量的缺省值。它從未分配過的價值。布爾值爲False,數值類型爲0,DateTime爲1的午夜1月1日,引用類型引用的空引用,可爲可空類型的Nothing,對於結構類型的所有成員都設置爲Nothing。

我認爲大多數程序員強烈傾向於使用顯式設置整數爲0和布爾值爲False(我這樣做),但沒有任何是正確的。對於引用類型,可空類型和使用泛型的代碼,您無法避免使用Nothing

相關問題