Java日积月累-1:Java中boolean类型的位运算
1. 首先回顾一下java中的8中基本类型及其存储所占用的bit数。
类型 | bit数 |
byte | 8 |
short | 16 |
int | 32 |
float | 32 |
long | 64 |
double | 64 |
char | 16 |
boolean | 1 |
2. 再回顾一下java的运算符和优先级
运算符 | 优先级 |
后缀运算符 | expr ++ expr -- |
一元运算符 | ++expr --expr +expr -expr ~ ! |
乘运算符 | * / % |
加运算符 | + - |
位移预算符 | << >> >>> |
关系运算符 | < > <= >= instanceof |
相等运算符 | == != |
位与 | & |
位异或 | ^ |
位或 | | |
逻辑与 | && |
逻辑或 | || |
三元运算符 | ? : |
赋值运算符 | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
3. 我们知道逻辑与和逻辑或在运算时执行短路运算,但是当执行boolean类型的位运算时,其结果也是boolean型,运算结果与执行逻辑运算的结果的相同,但是位运算并不执行短路运算。通过下面的例子我们可以看到:
所以我们有时在用位运算替代逻辑运算时,如果依赖于逻辑运算的短路运算时,一定要注意到这点。