Junhc

岂止于博客

Java中&与&&和|与||运算符

&&&
使用&时,当前面的表达式为假时,程序会继续执行后面的表达式,然后再得出False的结果
int i = 0;
if (i == 1 & ++i > 0) {
}
System.out.println("i = " + i);
// i = 1
使用&&时,当前面的表达式为假时,则不会执行后面的表达式,直接得出False的结果
int i = 0;
if (i == 1 && ++i > 0) {
}
System.out.println("i = " + i);
// i = 0
|||
使用|时,当前面的表达式为真时,程序会继续执行后面的表达式,然后再得出True的结果
int i = 0;
if (1 == 1 | ++i > 0) {
    System.out.println("i = " + i);
}
// i = 1
使用||时,当前面的表达式为真时,则不会执行后面的表达式,直接得出True的结果
int i = 0;
if (1 == 1 || ++i > 0) {
    System.out.println("i = " + i);
}
// i = 0
使用|&运算实现权限判断
权限名称 权限码
1
查询 2
4
更新 8
删除 16
.. 2^64
// 添加权限
我的权限码 =|查询||更新;
我的权限码 = 1|2|4|8 = 15;

// 删除写权限
我的权限码 = 我的权限码^(我的权限码&写);
我的权限码 = 15^(15&4) = 11;

// 判断单个权限
return (我的权限码&更新) == 更新;
return (15&8) == 8;

// 判断多个权限
要判断的权限码 =|更新|写;
要判断的权限码 = 1|4|8 = 13;
return (我的权限码&要判断的权限码) == 要判断的权限码;
return (15&13) == 13;