OCA8 Java认证真题:Java运算符短路特性相关问题求解
题目考点说明
本题核心考察Java中按位逻辑运算符和短路逻辑运算符的执行差异,是OCA8认证的高频考点。
核心规则先明确
- 无短路的运算符:
&(按位与)、|(按位或):无论左侧操作数是否能确定整个表达式的最终结果,都会强制执行右侧的所有表达式 - 有短路的运算符:
&&(短路与)、||(短路或):只要左侧操作数已经可以确定整个表达式的结果,就会直接跳过右侧表达式的执行
逐行代码执行逻辑分析
我们依次看标注的4行赋值语句:
- 第1行代码:
bool = (bool2 & method1("1"));
此处用的是无短路的
&运算符,即使左侧bool2的值已经是false(与运算只要有一个false结果必为false),仍然会执行右侧的method1("1"),所以控制台会打印1,最终表达式结果为false & true = false赋值给bool。
- 第2行代码:
bool = (bool2 && method1("2"));
此处用的是有短路的
&&运算符,左侧bool2为false已经能确定整个与运算的结果为false,所以直接短路跳过右侧method1("2")的执行,不会打印2。
- 第3行代码:
bool = (bool1 | method1("3"));
此处用的是无短路的
|运算符,即使左侧bool1的值已经是true(或运算只要有一个true结果必为true),仍然会执行右侧的method1("3"),所以控制台会打印3,最终表达式结果为true | true = true赋值给bool。
- 第4行代码:
bool = (bool1 || method1("4"));
此处用的是有短路的
||运算符,左侧bool1为true已经能确定整个或运算的结果为true,所以直接短路跳过右侧method1("4")的执行,不会打印4。
最终输出结论
综合以上执行逻辑,程序只会打印1和3,和参考答案一致。
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

