Java逻辑运算符&&与&,||与|的区别和应用
在 java中&&和||是比较常见的逻辑运算符,与他们类似的还有&和|,他们有什么叙别呢?
一、介绍
1.&&意思是“条件与”逻辑操作符,逻辑运算中代表的含义是 运算符前后都为ture时,返回ture,运算符前后有一个为false时返回false(两真才真,一假全假)
int a=5; //a<7 为true int b=2; //b>1 为true System.out.println(a<7 && b>1); //-->true //两真才真
int a=5; //a<7 为true int b=2; //b!=2 为false System.out.println(a<7 && b!=2); //-->false //一假全假
在实际开发中我们应该如何使用呢?从&&的官方解释上可能不是很好理解,我在下面举一个例子,帮助理解
//需求:验证账号和密码 //假设账号是123,密码是456 int a=100; int b=140; if(a==123 && b==456){ System.out.println("登陆成功!"); }else{ System.out.println("登陆失败!"); } /* 理解:使用&&时 可以把&&看成是是英语中的and 两个条件都满足时,则判断成功,否则执行else */
2.||意思是“条件或”逻辑操作符,运算符前后都为false时,返回false,运算符前后有一个为ture时则返回true(两假才假,一真全真)int a=5; //b<5 返回false int b=2; //b!=2 返回false System.out.println(a<3 || b!=2); //-->false //两假才假
int a=5; //b==5 返回true int b=2; //b>4 返回false System.out.println(a==5 || b>4); //-->true //一真全真
二、&&与&、||与|的区别
其实&& 与&、||与|的逻辑功能还是一样的没有什么区别,也就是说在条件语句中通常情况下&&可以用&替换,||可以用|替换,但是需要注意&&和||都是具有短路效果的
结论: ★&&与&、||与|的区别是 &&和||具有短路效果,而&和|不具有短路效果
什么是短路效果?
① &&如果逻辑运算前面的条件为false时,整条语句就已经可以判断为false,逻辑运算符后面的代码将不再执行
②|| 也是一样的,如果逻辑运算符前面的条件为true时,整条语句就一假可以判断为true了,逻辑运算符后面的代码将不再执行
直接上例子//&&中一假全假 int a=5; //a>6 返回false int b=2; //b++ 直接不考虑 //a>6已经返回false直接阻断 //b++没有执行 if(a>6 && b++>3){}else{ System.out.println("b="+b); //-->b=2 } //所以b还是为2
//||中一真全真 int c=4; // c==4 返回ture int d=8; // b-- 直接不考虑 //c==6已经返回ture直接阻断 //d--没有执行 if(c==4 || d--<5){ System.out.println("d="+d); //-->d=8 }
有的时候我们在具有&&和||的条件语句中放上三元运算符或者是自增、自减时 就会出现短路的效果导致代码异常,当然,我们在开发中,也可以利用这种短路达到一种奇妙的效果..
3. 短路与++a、--a
在Java中大家都知道 ++a与a++的区别就是先自增再运算,那么在&&和||的短路效果中是先自增么?
我们来试验一下看看效果://||中一真全真 int c=4; int d=8; if(c==4 || ++d<5){ System.out.println("d="+d); //-->d=8 } //最终d还是8没有完成自增
结论:++a与--a是会被&&和||阻断的,无论是前置还是后置
4. &&与||短路、自增和三元运算
&&和||短路的逻辑虽然比较简单,但是一旦与自增、自减和三元运算混合在一起,确是部分公司面试的基础题
直接看例题://问:会输出什么 int d=5; int e=2; d+=++e>5&&d++>3?++e:d++; System.out.println(--d%2==0?++d:d--); //A:4 //B:12 //C:6 //D:9 //答案:D
发表评论