首先 &和| 稱為布爾運算符,&&和|| 稱為條件布爾運算符。
兩種運算符得到的結果完全相同,但得到結果的方式又一個重要區別:條件布爾運算符性能比較好。他檢查第一個操作數的值,再根據該操作數的值進行操作,可能根本就不處理第二個操作數。
如果&&運算符的第一個操作數是false,就不需要考慮第二個操作數的值了,因為無論第二個操作數的值是什么,其結果都是false。同樣,如果第一個操作數是true,||運算符就返回true,無需考慮第二個操作數的值。但&和|卻不是這樣,它們總是要計算兩個操作數。
因為操作數的就算是有條件的,如果使用&&和||運算符來代替&和|,性能會有一定提高。在大量使用這些運算符的應用程序中這表現得尤為明顯。作為一個原則,盡可能使用&&和||運算符。這些運算符有時用於比較復雜的情形,例如,只有一個操作數包含某個值時,才計算第二個操作數(讓我想起微軟報表那點事了):
var1 = (var2 != 0) && ( var3 / var2 > 2 );
如果var2是0,則var3除以var2就會導致“除0錯誤”,或者把var1定義為無窮大(對於某些類型如float來說,可能出現后一種情形,也是可以檢測到的)。
那&和|有什么用呢?其實他們還有一個作用:對數值進行操作,以這種方式使用時,它們處理的是變量中存儲的一系列位,而不是變量值,因此他們稱為按位運算符。這個在很少用到,用到的時候再去復習吧。
(摘自《C#入門經典》第五版)