壹影博客.
我在下午4点钟开始想你
Java中逻辑运算符&&与&,||与|的区别和应用
  • 2023-3-19日
  • 0评论
  • 12972围观

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

 

发表评论

渝ICP备19011465号 | 渝ICP备19011465号-1