2016-09-30 143 views
2

通過在JavaFX中查找一些自定義庫https://github.com/HanSolo/submitbutton/blob/master/src/main/java/eu/hansolo/submitbutton/Demo.javaJava邏輯XOR(「^」)與邏輯NOT(「!」)

我用這段代碼走過來:

    if (toggle) { //where toogle is a boolean 
        if (progress > 0.75) { 
          progress = 0; 
          button.setFailed(); 
          timer.stop(); 
          toggle ^= true; 
         } 
        } else { 
         if (progress > 1) { 
          progress = 0; 
          timer.stop(); 
          toggle ^= true; 
         } 
        } 
       } 

問題

爲什麼編碼器寫道toggle ^= true;我的理解它做什麼following the table below

A B A^B 
0 0  0 
0 1  1 
1 0  1 
1 1  0 

改爲使用toggle=!toggle;

是這樣一種模式,它與任何性能的改善做的,或者是個人喜好?我很好奇,雖然導致我第一次看到這個...

+7

恕我直言,這看起來像不必要的混淆。當你的意思是否定一個布爾值時,你應該使用'!'。 –

+0

看起來像只是吹噓自己對按位運算符的知識(在這種情況下,如果你問我的話是不必要的)。我的2美分。 –

+4

'someReallyLongVariableName^= true;'可能比'someReallyLongVariableName =!someReallyLongVariableName;'更容易閱讀。 – shmosel

回答

1

FWIW,它不是一個「位運算」布爾之間。這是一個「邏輯操作」。布爾運算符和整數運算符之間的運算符是不同的,但是是相關的。

+1

'True = 1'和'False = 0'然後它像數字一樣工作,或者我錯了?你的意思是? – GOXR3PLUS

+1

@ GoXR3Plus [JLS](http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.2)在操作數時稱它們爲「布爾邏輯運算符」是布爾型的。 – EJP

+1

@ GoXR3Plus它實際上只是術語,但在Java中(與C不同)'false'與'0'完全不同。它們是不同的類型,不可互換。說「真= 1」和「假= 0」是不正確的。所以* bitwise *'^'運算符是一個對數字類型有效的運算符;它與在布爾運算上運行的*布爾邏輯運算符*'^'截然不同;它們是兩個完全不同的運算符,即使它們使用相同的語法。要說的是,你的問題的題目是錯誤的。 –