//定义变量a、b,并为两个变量赋值
int a=5;
int b=10;
//对a>4,b++>10求或运算
if(a>4 | b++>10)
{
//输出a的值5,b的值11.
system.out.printin("a的值是"+a+"b的值是"+b);
}
//定义变量c、d,并为两个变量赋值
int c=5;
int d=10;
//对c>4,d++>10求或运算
if(c>4 | d++>10)
{
//输出c的值5,d的值10.
system.out.printin("c的值是"+c+"d的值是"+d);
}
对于两段代码,后面的代码只是将不断路或改为短路或,程序最后输出的d值不再是11,这说明表达式d++>10没有货的执行的机会,因为对于短路的逻辑或而言,如果第一个操作数返回true,||将不会对第二个操作数求值,直接返回true,不会计算d++>10这个表达式,因而d++没有货的执行的机会。因此,最后输出d为10,而不短路或|总是执行前后两个操作数。
& 和&& 的区别与此类似。
&总会计算前后两个操作数,而&&先计算左边的操作数,如果左边操作数为false,直接返回false,根本不会计算右边的操作数。