繁体   English   中英

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

[英]Why does (boolean ^ int > 0) work?

当你尝试做这样的事情:

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

编译器合理地说,没有为参数类型boolean和int定义operator ^ 但如果你像这样使用它:

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

有人可以解释一下在引擎盖下发生了什么?

这很简单: > 优先级高于^ ,所以

if (true ^ 1 > 0) {

相当于

if (true ^ (1 > 0)) {

这相当于

if (true ^ true)

......这只是逻辑XOR。

我不会写这样的代码,请注意。 我会惊讶地发现一个无法以不同方式更清楚地写出的例子。

因为operation >具有比^更高的优先级,所以它相当于使用相同类型(boolean ^ boolean)操作的true ^ (1>0) )。

1是int类型。

1> 0的类型为boolean。

^表示异或; 你不能XOR布尔和int。

换句话说:第一个表达式“1”计算为一个数字; 第二个表达式“1> 0”计算为布尔逻辑。 其背后的原因是运营商的先天性

由于操作的顺序(优先级)很重要, >优先级高于^

这里,首先我们检查1 > 0然后第一个操作与第一个结果进行异或( ^

相当于if(true ^ (1 > 0 ))

但是,当然你不能用int对Xored进行异或

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM