2013-04-30 63 views
-2

這個問題用於良好的代碼和代碼優化開發。布爾狀態測試 - 哪個好?

boolean a = false; 

其條件是最好的

if(a == false) 

if(!a) 

請給一些描述與系統級兩種狀況發生什麼。

+5

這是什麼編程語言?你使用什麼編譯器?目標平臺是什麼? – Thilo 2013-04-30 10:15:12

+1

@Thilo:我問的是一般性的術語,而不是任何選定的平臺或編程語言。這個例子。 – 2013-04-30 10:24:16

+4

'if((a == false)== true')怎麼了? ; - > – Roddy 2013-04-30 10:26:20

回答

3
if (!a) 

另一種是可怕的「布爾洗錢」風格。

內部的意思是相同的(即使在C中,兩個條件都是正確的,因爲a0),所以關於優化沒有區別。

+0

你能解釋術語「布爾洗滌」嗎?我喜歡它(讓人想起洗錢),但我無法弄清楚。 – 2013-04-30 11:26:55

+0

當我簡化了幾個'if(condition){var = true; } else {var = false;最近。不知何故,很多人不會將布爾和條件視爲同一事物,需要一個「if」或關係運算符來進行轉換。是的,與洗錢的相似性是有意的。 – starblue 2013-05-01 17:58:46

3

這些最有可能最終是由編譯器決定的完全相同的指令(有問題的語言)。

1

它們完全一樣。編譯器將代碼編譯爲最好的方式。

+0

我想一些區別@系統級 – 2013-04-30 10:18:59

+2

@AnkurPatel。在「一般條款」中,功能或性能沒有區別。一些特定的(並且非常破碎的)編譯器或解釋器可能比另一個更喜歡它,但是你必須檢查asm代碼/基準來查看...... – Roddy 2013-04-30 10:29:01

0

我認爲這取決於布爾變量的操作歷史。

如果之前已賦值給一個布爾變量在不同尋常的方式喜歡它的值使用不同類型的,用數學表達式分配,那麼我認爲第二選擇:如果更安全,更容易函數(!)正如你所期望的那樣,但是如果你總是隻使用布爾變量或者只對布爾值進行求值的表達式來賦值,那麼它並不重要。不過,我個人覺得第一選擇:if(a == false)更具可讀性。

關於表現,我同意所有其他答案。