日期:2014-05-20  浏览次数:20725 次

求神人讲解下面这个程序
public class EqualTest {
static int j;
public static void main(String[] args) {

methodA(0);
System.out.println(j);


}
public static boolean methodB(int k) {
j+=k;
return true;
}
public static void methodA(int i) {
boolean b;
b=i<10|methodB(4);
b=i<10||methodB(8);
}
}

为什么输出是4,不是12.

------解决方案--------------------
b=i<10||methodB(8);由于i<10成立了所以就不会再执行methodB(8)这个方法了。因为用的是||
------解决方案--------------------
b=i<10||methodB(8);

||是短路或,i<10判断是真(i为4),他就不进行methodB(8)运算了。
------解决方案--------------------
Java code
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