写点什么

Java 中 &、|、&&、||详解

用户头像
Sakura
关注
发布于: 2021 年 04 月 27 日

1、Java 中 &叫做按位与,&&叫做短路与,它们的区别是:

& 既是位运算符又是逻辑运算符,&的两侧可以是 int,也可以是 boolean 表达式,当 &两侧是 int 时,要先把运算符两侧的数转化为二进制数再进行运算,而短路与(&&)的两侧要求必须是布尔表达式。举例如下:

12&5 的值是多少?答:12 转成二进制数是 1100(前四位省略了),5 转成二进制数是 0101,则运算后的结果为 0100 即 4 这是两侧为数值时;

若 int i = 2,j = 4;则(++i=2)&(j++=4)的结果为 false,其过程是这样的:先判断++i=2 是否成立,这里当然是不成立了(3 == 2),但是程序还会继续判断下一个表达式是否成立,j++=4 ,该表达式是成立的,但是 &运算符要求运算符两侧的值都为真,结果才为真,所以(++i=2)&(j++=4)的结果为 false 注意 :&为真的条件是两侧表达式都为真,但是即使我们判断出左侧表达式的值为 false,程序也还是要继续执行去判断右侧的表达式值的真假

若 int i = 2,j = 4;则(++i=2)&&(j++=4)的结果为 false,其过程基本上和上面的是相同的,但是若左侧表达式的值为 false 时,程序则不会继续判断右侧表达式的真假了,短路与中,短路这个词大概也就是这个意思吧

2、Java 中‘|’与‘||’的区别

int i=0;

if(3>2 || (i++)>1) i=i+1;

System.out.println(i);

这段程序会打印出 1,而不是打印出 2。

因为在 if 的条件判断中,程序先判断第一个表达式 3>2 是否成立,结果 3>2 为真,那么按照逻辑来说,无论后面一个表达式(i++)>1 是否成立,整个或表达式肯定为真,因此程序就不去执行判断后面一个表达式即(i++)>1 了,所以这里 i 并没有自增 1。然后程序执行到 i=i+1,于是 i 变为 1。最后打印出 1。

int i=0;

if(3>2 | (i++)>1) i=i+1;

System.out.println(i);

如果换做这样写,那么就是打印出 2 了,因为无论第一个条件 3>2 是否为真,程序都会去执行判断第二个条件表达式,因此 i++这个自增是会被执行的,再加上 if 内的 i=i+1,所以最终 i=2。

有些人习惯把||叫做短路或,把 &&叫做短路与。&&和 &的区别和||与|的区别类似,对于 &&来说,如果前面的条件表达式已经为假了,整个条件表达式肯定为假,就不会去执行判断后面的条件表达式。

用户头像

Sakura

关注

还未添加个人签名 2020.09.22 加入

还未添加个人简介

评论

发布
暂无评论
Java中&、|、&&、||详解