2013-03-05 60 views
0

這個問題很簡單。使用什麼:布爾變量替代或空值真/假識別

Object obj; 

obj = new Object(); 

if(obj!=null) { 
    // this means my object is *set* 
} 

其他

Object obj; 
Boolean objSet = false; 

obj = new Object(); 
objSet = true; 

if(objSet) { 
    // this means my object is *set* 
} 

哪一個更正確。我聽說數據庫和一些方法的行爲將以不同的方式失效。

+0

*「我聽說數據庫和某些方法的行爲將以不同方式失效。」* - 你指的是什麼? – 2013-03-05 00:36:11

回答

6

「正確」不是選擇的詞。如果它編譯並做了它應該做的,它是正確的。

作爲一個有用的事情,我會更好地使用更直接的檢查。添加布爾變量以避免執行== null檢查意味着額外的(最小的開銷),更多的行,困難的可讀性並且可能引入錯誤。

如果條件足夠複雜以至於需要顯式地添加布爾變量(例如,如果必須檢查是否滿足一組條件中的所有條件)。

而且順便說一句,因爲你正在使用Boolean,而不是boolean,你引入objSet爲空本身,如果你不能很好地編寫它的可能性。

+0

非常感謝! – 2013-03-05 00:32:05

3

也不是更正確

  • 從行爲語義的角度來看,他們做同樣的事情......假設他們得到正確實施。

  • 從性能角度來看,差異是可能在整個應用程序的上下文中可以忽略不計。

  • 從空間使用的角度來看,不同的是可能可以忽略不計......除非objobjSet田野,你有相關類的很多,很多情況下。

  • 從穩健性角度來看(例如避免意想不到的NPE),沒有定性差異。如果您忘記進行測試,您可以在任何情況下獲得NPE。 (我猜如果你改變了這個例子來包含一些改變了obj的東西,那麼帶有單獨標誌的版本就更加複雜了,因此很難正確使用它。但是如果你將邏輯封裝在setter方法中,那麼你只需要得到它一次一次...)

所以真的,它歸結爲哪個版本的代碼更具可讀性。這是主觀的......所以「更正確」並不包含在內。大多數有經驗的程序員可能會認識這個習慣用法,並且更喜歡第一個版本。

+0

謝謝你的澄清! – 2013-03-05 00:32:31