java - Kotlin 中的 XOR 运算符是功能还是错误?
问题描述
多年来,我一直是一名 Java 开发人员,最近我在 Kotlin 中发现了一些非常令人惊讶的东西。在 Java 中有一个很少使用的逻辑运算符^
XOR,但有时它很有用。例如:您可以轻松检查两个数字中是否只有一个大于零。
使用&&
AND运算符和一些变量a
,b
它看起来像这样:
boolean valid = (a > 0 && b <= 0) || (a <= 0 && b > 0);
但它可以通过^
XOR轻松实现:
boolean valid = a > 0 ^ b > 0;
现在,在 Kotline 中,我们不用^
作XOR,但xor
在 Kotlin 中相同的代码看起来像这样:
val valid = a > 0 xor b > 0;
这里出现了一个问题,因为 Kotline 中的这段代码给出了......编译错误!为什么?因为在 Java 中,所有逻辑运算符 ( &,&&,|,||,^
) 的优先级都低于关系运算符 ( >, >=, <, <=, ==, !=
)。在 Koltin 中也是如此,但它看起来不像xor
. 所以它是这样的:
a > 0
给出布尔值boolean xor b > 0
首先评估为:boolean xor b
不是b > 0
- 最后我们得到了编译错误,上面写着:
The integer literal does not conform to the expected type Boolean
你可以在这里检查这种情况:XOR not working well
一个额外的案例:如果你认为这个:a > 0 xor (b > 0)
有效......好吧,不。另一个编译错误:Type mismatch: inferred type is Boolean but Int was expected
谁能解释一下这种逻辑是否有目的,或者这只是 Kotlin 语言中的一个错误?
解决方案
推荐阅读
- xamarin.forms - 如果我发布一个包名与捆绑包 ID 不同的应用程序,我会遇到问题吗?
- python - 如何将 numpy.array2string 形成的字符串转换回数组?
- sql - 两个 Count 函数在 join 中相乘?
- javascript - 如何使用 redux saga 阻止客户端错误?
- javascript - Javascript 在客户端无法访问的情况下解密文件
- python-3.x - ValueError:选项名称 {'--browser'} 已添加
- python - 计算两个 3D 向量之间的角度
- reactjs - 获取 Object(...) 不是我的拖放上下文中的函数。我正在使用反应
- azure - Azure AppService 在没有详细信息的情况下崩溃
- python-3.x - DataFrame 对象有没有办法根据单行条件和前面的行来抓取行?就像 Linux 上的 'grep -B1 ...'