Java的逻辑运算符有3种,分别为"&&(逻辑与)", "||(逻辑或)", "!(逻辑非)"。
两个表达式的逻辑或结果如下:
即假设表达式为true,则!表达式 返回false
假设表达式为false,则!表达式 返回true
Java中"&&(逻辑与)"和"||(逻辑或)"都有短路的效果。
看如下代码和运行结果:
如上结果,第4和第5行左表达式为false时,程序不在判断右表达式,直接返回结果false
第7和第8行左表达式为true时,程序不在判断右表达式,直接返回结果true。
这就是"&&(逻辑与)"和"||(逻辑或)"运算符的短路效果。
即:
&&(逻辑与):如果左表达式为false时,不再判断右表达式,直接返回结果false
||(逻辑或):如果左表达式为true时,不再判断右表达式,直接返回结果true
1、逻辑与运算符(&&)
逻辑与运算符是二元运算符,连接2个表达式,返回结果为true/false。两个表达式的逻辑与结果如下:
2、逻辑或运算符(||)
逻辑或运算符是二元运算符,连接2个表达式,返回结果为true/false。两个表达式的逻辑或结果如下:
3、逻辑非运算符(!)
逻辑非运算符是一元运算符,连接1个表达式,返回结果为true/false。即假设表达式为true,则!表达式 返回false
假设表达式为false,则!表达式 返回true
Java中"&&(逻辑与)"和"||(逻辑或)"都有短路的效果。
看如下代码和运行结果:
public class Test {
public boolean funTrue(String str) {
System.out.print(" true"+str+" ");
return true;
}
public boolean funFalse(String str) {
System.out.print(" false"+str+" ");
return false;
}
public static void main(String[] args) {
Test test = new Test();
System.out.println("#逻辑与#");
boolean flag = test.funTrue("(左表达式)") && test.funTrue("(右表达式)");
System.out.println(" = "+flag);
flag = test.funTrue("(左表达式)") && test.funFalse("(右表达式)");
System.out.println(" = "+flag);
flag = test.funFalse("(左表达式)") && test.funTrue("(右表达式)");
System.out.println(" = "+flag);
flag = test.funFalse("(左表达式)") && test.funFalse("(右表达式)");
System.out.println(" = "+flag);
System.out.println("#逻辑或#");
flag = test.funTrue("(左表达式)") || test.funTrue("(右表达式)");
System.out.println(" = "+flag);
flag = test.funTrue("(左表达式)") || test.funFalse("(右表达式)");
System.out.println(" = "+flag);
flag = test.funFalse("(左表达式)") || test.funTrue("(右表达式)");
System.out.println(" = "+flag);
flag = test.funFalse("(左表达式)") || test.funFalse("(右表达式)");
System.out.println(" = "+flag);
}
}
运行结果(编号为我自己加的,方便后面描述)为:
1#逻辑与#
2 true(左表达式) true(右表达式) = true
3 true(左表达式) false(右表达式) = false
4 false(左表达式) = false
5 false(左表达式) = false
6#逻辑或#
7 true(左表达式) = true
8 true(左表达式) = true
9 false(左表达式) true(右表达式) = true
10 false(左表达式) false(右表达式) = false
如上结果,第4和第5行左表达式为false时,程序不在判断右表达式,直接返回结果false
第7和第8行左表达式为true时,程序不在判断右表达式,直接返回结果true。
这就是"&&(逻辑与)"和"||(逻辑或)"运算符的短路效果。
即:
&&(逻辑与):如果左表达式为false时,不再判断右表达式,直接返回结果false
||(逻辑或):如果左表达式为true时,不再判断右表达式,直接返回结果true