首先名称是不同的:
& 按位与| 按位或它们都是位运算符
if(a==1&&b==2) 这是说既要满足a=1也要满足b=2
if(a==1||b==2) 这是说或者满足a=1或者要满足b=2
而a&b或者a|b则是二进制的与或运算
&同为1时为1,否则为0
|同为0时为0,否则为1
3&5则
0011
&0101
0001
等于1
3|5则
0011
|0101
0111
等于7
&&逻辑与 也叫做短路与 因为只要当前项为假,它就不往后判断了,直接认为表达式为假
||逻辑或 也叫做短路或 因为只要当前项为真,它也不往后判断了,直接认为表达式为真
Java中逻辑运算短路的理解:
短路 就是知如果左侧的表达式能确定运算后的结果,则不再计算右侧的表达式。
如(1>2)&&(2<3) 明明左侧已经为假 了 ,我 不用计算右侧我一定知道 此表达是为假,这样 就好似物理中的电流,当某处短路时,电流直接从一条路通过,而不再管另一条路。
看个例子:
public class Logic{
public static void main(String[] args){
int a = 1
int b = 1
if(a<b&&b<a++){
System.out.println(a>b&true)
System.out.println(a)
System.out.println("this's in my control")
else{
System.out.println("that's impossible")
System.out.println(a)
此处由于a<b为假 ,所以 后面的b<a++不会执行
此处的结果为
that's impossible
若假设a的初值为0,此时a<b成立,这时就要计算后面的值了
结果应该为和上面一样。
运算符书上说:“在java中的逻辑与和逻辑或运算符采用“短路”方法进行计算,先求出运算符左边的表达式的值,对或运算如果为true,则整个表达式的结果为true,不必对运算符右边的表达式进行计算。同样,对与运算,如果左边的表达式的值为false,则不必对右边的表达式的值进行计算,整个表达式的值为false,”两者都是或,但是不一样。
不同点:同与 *** 作类似,||表示短路或,当运算符左边的值为true时,右边的表达式不会进行运算。
举个例:
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。
扩展资料|与||的相同点:二者都表示或 *** 作,当运算符两边的 *** 作数任何一边的值为true时,其结果为true,当两边的值都为false时,其结果才为false。
&与&&的异同点。
相同点:二者都表示与 *** 作,当且仅当运算符两边的 *** 作数都为true时,其结果才为true,否则为false。
不同点:在使用&进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用&&进行运算时,当左边为false时,右边的表达式不会进行运算,因此&&被称作短路与。
注意事项:
逻辑运算符一般用于连接boolean类型的表达式或者值。
表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
算术表达式:a + b
比较表达式:a == b(条件表达式)
参考资料
百度百科——Java
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)