java - 为什么 (boolean ^ int > 0) 有效?

标签 java syntax

当你尝试做这样的事情时:

if (true ^ 1) {
  //do something
}

编译器有理由说运算符 ^ 没有为参数类型 boolean 和 int 定义。 但是如果你这样使用它:

if (true ^ 1 > 0) {
  //do something
}

代码可以编译(至少对于 Java 8)并且可以完美运行。 基本上这些操作:

false ^ -1 > 0 
false ^ 1 > 0
true ^ -1 > 0
true ^ 1 > 0

表现得像一个有效的逻辑异或:

     | ^
-----+--
 F F | F
 F T | T
 T F | T
 T T | F

谁能解释一下幕后发生了什么?

最佳答案

很简单:> 有更高的 precedence^,所以

if (true ^ 1 > 0) {

等价于

if (true ^ (1 > 0)) {

相当于

if (true ^ true)

...这只是逻辑异或。

我永远不会编写这样的代码,请注意。看到一个无法以不同方式更清楚地编写的示例,我会感到惊讶。

关于java - 为什么 (boolean ^ int > 0) 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41854640/

相关文章:

java - 使用DFS回溯算法生成迷宫的问题

java - 关注面板中的文本字段,该面板位于包含许多面板的选项卡式 Pane 中

c# - 如何使用 Type.GetType(string) 获取嵌套类的类型

c++ - 中缀 vs 前缀语法 : name lookup differences

java - 如何从终端读取文本文件并将输出保存到java中的另一个文件?

java - 如何从 Java 转换 csv 文件中的指数

python - 用于除法时, '/' 和 '//' 有什么区别?

尝试在函数的参数中使用变量时出现 Javascript 语法错误

c++ - 我对 C++ 中 '<<' 的运算符重载的使用感到困惑

java - 适用于 JUnit 的便捷 Java 图像查看器