按位运算符对 Java 中布尔值的影响

2022-08-31 08:33:58

按位运算符应该行进变量并逐位对它们进行操作。在整数,多头,字符的情况下,这是有道理的。这些变量可以包含由其大小强制执行的值的完整范围。

但是,对于布尔值,一个布尔值只能包含两个值。1 = 真或 0 = 假。但布尔值的大小未定义。它可以像一个字节一样大,也可以像小一个位一样小。

那么,对布尔值使用按位运算符有什么影响呢?JVM 是否基本上将其转换为正常的逻辑运算符并继续前进?出于操作目的,它是否将布尔值视为单个位实体?还是结果与布尔值的大小一起未定义?


答案 1

运算符 、 和 是按位运算符,当操作数是基元积分类型时。当操作数是布尔值时,它们是逻辑运算符,并且指定了它们在后一种情况下的行为。有关详细信息,请参阅 Java 语言规范的 15.22.2 节。&^|


答案 2

使用按位运算符可以规避短路行为:

boolean b = booleanExpression1() && booleanExpression2();
boolean b = booleanExpression1() & booleanExpression2();

如果计算结果为 ,则
在第一种情况下不进行评估,并且在
第二种情况下(以及它可能产生的任何副作用)进行评估,booleanExpression1()falsebooleanExpression2()booleanExpression2()