1.输出最后的结果是( ),并写出分析原理
void complicatedExpressionR(){
int x = 20, y = 30;
boolean b;
b = x > 50 && y > 60 || x > 50 && y < -60 || x < -50 && y > 60 || x < -50 && y < -60;
System.out.println(b);
}
分析:本题考察面试者对java运算符的理解。考察点:
1.1.运算符类别
Java的运算符,分为四类:
算数运算符、关系运算符、逻辑运算符、位运算符。
而&& 、|| 就属于逻辑运算符。
1.2.运算符优先级
这里是本题的迷惑点。运算符的优先级中,&&优先于||计算
1.3.短路运算
这才是本题的真正考点:
所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。
所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;
对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。
所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。
1.4答案:
所以当系统判断出x>50是false时就已经停止了运算,后面的代码无论什么结果也不用考虑了,b也就是false。