日期:2014-05-20 浏览次数:20775 次
public static void methodA(int i) { boolean b; b = i < 10 | methodB(4); // | 逻辑与 无论前面的表述式是什么值,都会计算第二个表达式 b = i < 10 || methodB(8); // || 短路与,b=i<10结果是true,整个表述式的值结果已经可以算出来了,后面不的表述示method(8)不执行 }
------解决方案--------------------
b=i<10|methodB(4); 单竖线"或"非短路操作,当前者为true继续执行后面的代码。j=4;
b=i<10||methodB(8);双竖线"或"短路操作符,前者为true时,或后面的代码不执行。
同样的也有& 和 && 的非短路和短路效果。 & 前条件为false时,&后面的代码会执行;
&& 前面的条件为false时,&&后面的代码不会执行。
------解决方案--------------------
"|"是非短路“或”,即前面表达式如果为“true”后面的表达式依然要执行。
"||"是短路“或”,前面表达式如果为“true”后面表达式不执行,只有在前面表达式为“false”时,才继续后面表达式的执行。
“&”是非短路“与”,即前面表达式为“false”的时候,依然继续执行后面的表达式。
“&&”是短路“与”,即前面表达式为“false”的时候,后面的表达式不执行,只有在前面表达式为“true”的时候,后面的表达式才执行。
------解决方案--------------------
接上面继续回答你的问题:
b=i<10||methodB(8);
上面代码用的短路“或”,所以前面表达式为“true”后面的methodB(8)代码就没有执行了。所以结果是4而不是12