&和&&的区别
程序员文章站
2022-03-01 17:16:44
...
相同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and)。
不同点:
(1)&&具有短路的功能,而&不具备短路功能。
(2)二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路与运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。而&就算左边的表达式为false,也会计算右边的表达式。
int i = 1;
System.out.println((i>1)&(3>i++));//false
System.out.println(i);//2
System.out.println((i>1)&&(3>i++));//false
System.out.println(i);//1 其中3>i++被短路了
(3)&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如:0x31 & 0x0f的结果为0x01。
总结:
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。
注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。