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.

解决方案 »

  1.   

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

  2.   

    b=i<10||methodB(8);||是短路或,i<10判断是真(i为4),他就不进行methodB(8)运算了。
      

  3.   

    public static void methodA(int i) {
    boolean b;
    b = i < 10 | methodB(4);
    // | 逻辑与 无论前面的表述式是什么值,都会计算第二个表达式
    b = i < 10 || methodB(8);
    // || 短路与,b=i<10结果是true,整个表述式的值结果已经可以算出来了,后面不的表述示method(8)不执行


    }
      

  4.   

    b=i<10|methodB(4); 单竖线"或"非短路操作,当前者为true继续执行后面的代码。j=4;
    b=i<10||methodB(8);双竖线"或"短路操作符,前者为true时,或后面的代码不执行。
    同样的也有& 和 && 的非短路和短路效果。 & 前条件为false时,&后面的代码会执行;
    && 前面的条件为false时,&&后面的代码不会执行。
      

  5.   

    "|"是非短路“或”,即前面表达式如果为“true”后面的表达式依然要执行。
    "||"是短路“或”,前面表达式如果为“true”后面表达式不执行,只有在前面表达式为“false”时,才继续后面表达式的执行。
    “&”是非短路“与”,即前面表达式为“false”的时候,依然继续执行后面的表达式。
    “&&”是短路“与”,即前面表达式为“false”的时候,后面的表达式不执行,只有在前面表达式为“true”的时候,后面的表达式才执行。
      

  6.   

    接上面继续回答你的问题:
    b=i<10||methodB(8);
    上面代码用的短路“或”,所以前面表达式为“true”后面的methodB(8)代码就没有执行了。所以结果是4而不是12