java - &、|、^ 是按位运算符还是逻辑运算符?

标签 java operators

首先我了解到&, |, ^ 是按位运算符,现在有人用 提到它们是逻辑运算符&&, ||,我完全糊涂了——同一个运算符有两个名字?已经有了逻辑运算符&&||,那为什么还要用&|^?

最佳答案

Java 运算符 &|^ 是位运算符或逻辑运算符……取决于操作数的类型。如果操作数是整数,则运算符是按位的。如果它们是 boolean 值,则运算符是合乎逻辑的。

这不仅仅是我说的。 JLS 也以这种方式描述这些运算符;见JLS 15.22 .

(这就像 + 意味着加法或字符串连接......取决于操作数的类型。或者就像“玫瑰”意味着花或淋浴附件。或者“猫”的意思是毛茸茸的动物或 UNIX 命令。单词在不同的上下文中有不同的含义。编程语言中使用的符号也是如此。)


There are already logical operators &&, ||, why use &, |, ^?

对于前两个,这是因为运算符在何时/是否计算操作数方面具有不同的语义。在不同的情况下需要这两种不同的语义;例如

    boolean res = str != null && str.isEmpty();

对比

    boolean res = foo() & bar();  // ... if I >>need<< to call both methods.

^ 运算符没有短路等效项,因为它根本没有意义。

关于java - &、|、^ 是按位运算符还是逻辑运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597978/

相关文章:

java - 在 Java 中使用什么更好? x <= 10 或 x < 11?

java - 无法使用运行时 exec 访问环境变量

exception - struct 中的内联加号运算符引发异常 (F#)

r - 为什么数据帧迭代中的逻辑运算不返回正确的值?

c++ - C++ 中的点 (.) 运算符和 -> 有什么区别?

java - Maven:将资源包含到 JAR 中

java - java.beans.Beans 类无法使用修饰符 ""访问 Perosn.PersonDAO 类的成员?

java - 无法在 Spock 中 stub Kafka 生产者记录

c++ - 比较同一类的两个对象

c - 什么是 C 中的 '#' 运算符?