(因為Java裏,無論如何,變量都必須先初始化,再使用,以保證安全,所以後面的語句裏必然會有 jack = new Man() 或是jack = ManFacory.getMan() 這樣的語句)
不加null
Man jack 表示聲明了壹個jack的變量 只知道妳的jack是壹個引用Man類型的變量,但是實際是它沒有任何的值.
Man jack = null; 聲明了壹個jack的變量, 但是它的值為null.也就是空.(註意,這裏null也認為是壹個值,只不過是個表示空的值,和上面的空是有差別的.)
如果硬要說它們有什麽區別的話.哪是這樣的
如果妳的代碼是這樣寫的:
//比如Man 類有壹個方法sayName() 它返回壹個字符串類型,表示自已的名字
Man jack
jack.sayName();
這樣寫編譯器會報錯,編譯都通不過. 因為jack從來沒有初始化過,而又要使用jack的方法,由於jack沒有引用任變量.所以編譯器認為妳語句有誤.
Man jack=null;
jack.sayName();
這樣寫編譯器可以讓妳通過,但是運行時報NullPointer錯誤.因為java編譯器認為jack有初始值(只不是是空值null).所以可以通過,不認為是妳誤句有誤.
錯誤(準確的說,應該是異常)是在執行時才被發現的.
而我們寫程序時,盡早發現錯誤並加以解決,是壹條軟件測試的原則. 所以如果有錯誤,最好是讓它編譯時就都通不過, 而不是到運行時,通地拋異常來發現.
所以.我的意見和上面幾位回答者相左.
Man jack = new Man();
這樣是最好的習慣.聲明時就把它初始化.
但是如果就 Man jack =null 和 Man jack; 相比. 加壹個null根本就沒有意義,只會騙過編譯器.反而把由忘記初始化變量而造成的程序運行異常的危險留到了運行時. 增加了調試的工作量.
所以,如果只想聲明變量,而不想初始化, 加壹個沒有任何意義的null . 是不明智的.
這種寫法和try catch 裏,在catch裏什麽都不寫有點像, 個人認為,都是壹種圖省事而不註意安全的細節問題. 程序代碼比較龐大時,細節問題而引起的debug所花的時間,住住就會浪費10倍於妳為了省這幾行代碼的時間.