首先我了解到&
, |
, ^
是按位运算符,现在有人用 提到它们是逻辑运算符&&
, ||
,我完全糊涂了——同一个运算符有两个名字?已经有了逻辑运算符&&
、||
,那为什么还要用&
、|
、^
?
最佳答案
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/