Java中的&(不短路與)

      開始學Java,發現了點新東西。。。

      Java中的與邏輯運算符是分類別的,有  短路與(&&) 不短路與(&) 之分, 先說說 短路與 ,我們知道與運算的邏輯規則是與運算的兩位操作數必須都是true的情況下才返回true——即: x && y 的 值當且僅當a和b都爲true時才返回true。

      那麼當x爲false時,無論y是true還是false整個與運算表達式(x && y)都返回false。那麼y的值就沒有計算的必要了。這就是短路與。看下面這個例子:


     2<1返回false,所以f++<3就沒有執行,下面的結果也符合情況f爲0.整個表達式a的值也爲false。那個Dead code也顯示了(f++<3)那段代碼是沒有意義的。這就是短路與。


那麼不短路(&)與就好理解了,那就是無論前一個操作數x是true還是false,表達式都會計算y的值然後的出總表達式的結果。

看下圖:


    (2<1)的值是false,但f的結果變成1了,所以(f++<3)還是執行了的。這就是不短路與。然後重點來了,就是位運算與怎麼處理呢???沒錯,這就是Java中 & 的另一個功能, 運算符 & 除了能表示邏輯與中的不短路與, 它還能表示位運算與,至於什麼是位運算,就是把兩個數按二進制表示對應的每一位都邏輯與(1表示true,0表示false),即1和1得1,1和0得0,0和0得0. 如下圖:


  因爲3的二進制表示爲11,2的二進制表示爲10.所以按爲與後就得10,即2.故結果爲2.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章