回答
沒有,沒有任何顯著差異。最後,在運行時,您將有一個名爲animal
的變量,其類型爲Animal
,定義時其值爲null
,稍後您將邏輯上將其值設置爲非null
值,以便使用它。
但是,有些人會選擇第一個而不是第二個聲明,反之亦然。此外,有人會認爲第二種情況下的null
的分配是多餘的。例如,如果您使用ReSharper,我認爲您會注意到關於設置那裏的冗餘的消息null
。
最後但並非最不重要的我想你定義了一個類型爲Animal
的變量,後來嘗試設置它的值(我指的是第一種情況)。如果是這樣,你處於一個良好的狀態。否則,如果你有下面的代碼片段:
Animal animal;
if(animal==null)
{
}
你可以得到的資料彙編和下面的描述編譯錯誤之前警告:
的使用未分配的局部變量「動物」
如果您只聲明瞭變量並且您從未使用過變量,則會收到以下說明的警告:
變量「動物」聲明,但從未使用
所有上述指局部變量的情況下,如果我們是在一個類變量的情況下,那麼事情有點不同。如果創建一個控制檯應用程序,你有下面的代碼片段:
class Program
{
static Animal animal;
static void Main(string[] args)
{
if(animal==null)
{
}
}
}
你不得到任何編譯錯誤。你將只能得到一個警告,在下面的描述:
Field 'Program.animal' is never assigned to, and will always have its default value null
有根據基於該context
C#規格的差異。在method
的上下文中,編譯器可以證明第一個animal
未分配,因此可以在使用它的下一行生成編譯器錯誤。如果編譯器可以證明沒有分配,C#編譯器將不允許使用方法變量。
然而,如果animal
是類字段它將自動初始化爲默認值,並且編譯器將不會產生錯誤。
下面是C#規格:
5.3明確分配
在函數構件的可執行代碼的給定位置,一 可變據說如果編譯器被明確賦值可以通過特定的靜態流量分析(§5.3.3)證明, ,該變量具有 已被自動初始化或已成爲至少一個 分配的目標。
因此,對於第一個,編譯器會生成一個"Use of an unassigned local variable"
。雖然第二,你明確地分配變量爲null
,所以編譯器應該沒問題。
這應該被接受。 – niksofteng
- 1. 這些(bCondition == NULL)和(NULL == bCondition)之間有什麼區別?
- 2. final class和static class之間的區別
- 3. C#中「Class」和「Private Class」聲明有什麼區別?
- 4. variant()和variant之間是否有區別?
- 5. SSRS中的Null,(Null)和Nothing之間是否有區別?
- 6. 這些#import聲明有什麼區別?
- 7. MySQL中的「!= NULL」和「IS NOT NULL」之間是否有區別?
- 8. Array聲明和Collection聲明之間有什麼區別
- 9. != null和!== null之間有什麼區別?
- 10. undefined和null之間有什麼區別?
- 11. ** copy **和** addAll **之間是否有區別?
- 12. 定義和聲明之間的區別
- 13. * .class和.class之間的gitignore區別
- 14. $(e.currentTarget)和$(this)之間是否有區別?
- 15. _function和function之間是否有區別?
- 16. 靜態聲明和非靜態聲明之間的區別
- 17. ArrayBased Stack實現pop()s [top] = null,top--和s [ - top] = null之間是否有區別?
- 18. Objective-C(null)和nil之間的區別
- 19. 這些查詢是否有區別
- 20. myNullableLong.HasValue和myNullableLong!= null之間是否有區別?
- 21. 這兩個聲明在反應JavaScript之間有什麼區別?
- 22. replica和replica之間是否有區別
- 23. ui:fragment和s:fragment之間是否有區別?
- 24. null == x和x == null之間的區別?
- 25. QString&和QString之間是否有區別?
- 26. `ListView.invalidateViews()`和'Adapter.notifyDataSetChanged()'之間是否有區別?
- 27. MySQL之間的區別是NOT NULL和!= ''
- 28. 這兩種聲明風格之間有什麼區別/優點
- 29. 聲明Stream與try-with-resources聲明之間有什麼區別?
- 30. PHP中NULL和null之間的區別
是的。首先你期望編譯器將對象設置爲其默認值,而在第二個對象中,你明確地將它的值設置爲null,這對於第一個對象來說總是比較安全的方法。 – Baahubali
https://msdn.microsoft.com/en-us/library/edakx9da.aspx。總之,如果您在分配變量之前嘗試訪問該變量,則第一種形式將生成編譯器錯誤,第二種形式會生成運行時錯誤。 – Claies
那些局部變量聲明或字段聲明? –