Java逻辑XOR(“^”)与逻辑NOT(“!”)

问题描述:

通过在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

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 *'^'运算符是一个对数字类型有效的运算符;它与在布尔运算上运行的*布尔逻辑运算符*'^'截然不同;它们是两个完全不同的运算符,即使它们使用相同的语法。要说的是,你的问题的题目是错误的。 –