目录

  • 一、||和|的异同
  • 二、&&和&的异同
  • 三、复杂的例子


一、||和|的异同

  1. 相同点:||和|都可以用作逻辑或的运算符,表示逻辑与(or),只要有一方为true,则结果为true。否则,当运算符两边的表达式的结果都为false时,整个运算结果才为false。
  2. 区别:”||“执行过程中会出现“短路”的现象。即若符号”||”前的表达式如果为true,那么后面的那个表达式将不会被执行,直接返回true。
  3. 示例代码:
//int i = 0, j = 1;
//”||“执行过程中会出现“短路”的现象。即若符号”||”前的表达式如果为true,那么后面的那个表达式将不会被执行,直接返回true。
//if (i == 0 || ++j > 0) j不会增长,if (i == 0 | ++j > 0) j会增长
int i = 0, j = 1;
if (i == 0 || ++j > 0) {
	System.out.println("j=" + j); //输出j=1,即未执行 ++j > 0语句
}
if (i == 232 || ++j > 0) {
	System.out.println("j=" + j); //输出j=2,执行++j > 0该语句
}
j=1;
if (i == 0 | ++j > 0) {
	System.out.println("j=" + j); //输出j=2,执行 ++j > 0语句
}

结果:

java蝐與rivateKey java中‖与|的区别_||和|

二、&&和&的异同

符号”&&”和符号”&”与”||“和“|”同理

  1. 相同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true。否则,只要有一方为false,则结果为false。
  2. 区别:&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。
    示例代码:
//int i = 0, j = 1;
//&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式
//if (i == 232 && ++j > 0) j不会增长,if (i == 232 & ++j > 0) j会增长
int i = 0, j = 1;
if (i == 232 && ++j > 0) {
	System.out.println("测试!!!");
} else {
	System.out.println("j=" + j); //输出j=1,即未执行 ++j > 0语句
}
if (i == 0 && ++j > 0) {
	System.out.println("j=" + j); //输出j=2,执行++j > 0该语句
}
j = 1;
if (i == 232 & ++j > 0) {
	System.out.println("测试!!!");
 } else {
	System.out.println("j=" + j); //输出j=2,执行 ++j > 0语句
}

结果:

java蝐與rivateKey java中‖与|的区别_||和|

三、复杂的例子

理解了这些,你就能明白我下面的第二段代码为啥删去一些判断表达式

boolean b = (i == 0 && j != 0) || (i == 0 && j == 0);

j != 0为true时,因为||的短路特性,就不会计算||之后的逻辑表达式,会直接返回true。所以当计算||之后的逻辑表达式时,j!=0肯定为false,即j==0肯定为true。
||之后的逻辑表达式相当于(i == 0 &&true),而(i == 0 &&true)等价于i==0

boolean b = (i == 0 && j != 0) || (i == 0);