Java逻辑异或(“^”)与逻辑非(“!”)

Java逻辑异或(“^”)与逻辑非(“!”),java,javafx,bit-manipulation,Java,Javafx,Bit Manipulation,通过查看JavaFX中的一些自定义库 我带来了这段代码: 问题: 为什么编码器编写toggle^=true我了解它的功能: 而是使用toggle=!切换 这是一种模式,它与任何性能改进有关,还是个人偏好?我很好奇,因为我第一次看到这个…FWIW,它不是布尔之间的“按位操作”。这是一种“逻辑操作”。Boolean和Int之间的运算符是不同的,尽管它们是相关的。IMHO这看起来像是不必要的混淆。你应该使用

通过查看JavaFX中的一些自定义库

我带来了这段代码:

问题:

为什么编码器编写
toggle^=true我了解它的功能:

而是使用
toggle=!切换


这是一种模式,它与任何性能改进有关,还是个人偏好?我很好奇,因为我第一次看到这个…

FWIW,它不是布尔之间的“按位操作”。这是一种“逻辑操作”。Boolean和Int之间的运算符是不同的,尽管它们是相关的。

IMHO这看起来像是不必要的混淆。你应该使用
someReallyLongVariableName^=true
可能比
someReallyLongVariableName=更容易阅读!一些真正的长变量名称
。我更好奇的是,当它们可以显式设置为true或false时,为什么它会同时使用切换。@shmosel的确,因为它被包装在
中,如果(…)
,它就相当于
toggle=false。我想我可能不会相信一个库中有这样的代码。
True=1
False=0
然后它像数字一样工作,或者我错了?你是什么意思?@GoXR3Plus在操作数是布尔的时候调用它们“布尔逻辑运算符”。@GoXR3Plus这实际上只是术语,但在Java中(与C不同)
false
0
完全不同;它们是不同的类型,不能互换。说“
true=1
false=0
”是不正确的。因此,按位
^
运算符是一种处理数字类型的运算符;它不同于对布尔运算的布尔逻辑运算符
^
;它们是两个完全不同的运算符,尽管它们使用相同的语法。我要说的是,你的问题的标题是错误的。@James_D这个布尔运算符在幕后是如何工作的?如果你想添加一个关于这个问题的答案,我可以接受。
                 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;
                        }
                    }
                 }
A   B   A ^ B
0   0     0
0   1     1
1   0     1
1   1     0