1. 程式人生 > >if (i == 1)和if (1 == i)有區別嗎?

if (i == 1)和if (1 == i)有區別嗎?

言之者無罪,聞之者足以戒。 - “詩序”

經常看到類似於if (1 == i)的程式碼,其實在java中它和if (i == 1)是沒有區別的,而且後者閱讀性更強些(除非你喜歡從右往左閱讀)。

那麼為什麼有的人喜歡用表示式if (1 == i)呢?這得從C/C++說起,在C/C++中,”if “條件判斷條件成立,是以0與非0為基準的,0表示false,非0表示true。

如果有這麼一段程式碼:
 

int i = 2;
if (i == 1)

在如上程式碼中,2==1為false,最終結果為false。

但是如果這麼寫:

int i = 2;
if (i = 1)

將i賦值為1,1是非0,最終結果就為true了。

那麼問題來了,萬一哪天程式設計師一個不小心,把”if (i == 1)”寫成”if (i = 1)”,這樣就有問題了。在if之內將i賦值為1,if判斷裡面的內容非0,返回的就是true了,但是明明i為2,比較的值是1,應該返回的false。這種情況在C/C++的開發中是很可能發生的並且會導致一些難以理解的錯誤產生,所以,為了避免開發者在if語句中不正確的賦值操作,c/c++的if語句一般會這麼寫:
 

int i = 2;
if (1 == i)

因為我們可以對一個變數賦值i為1,但是不能對一個常量賦值1為i,這樣寫,即使不小心寫成了”1 = i”,C/C++編譯器也可以第一時間檢查出來。