我有一节课:
public class Prog3 {
public static void main(String[] arg){
int k = 0, i = 0;
boolean r , t = true;
r = (t & 0 < (i +=1));
r = (t && 0 < (i +=2));
r = (t | 0 < (k +=1));
r = (t || 0 < (k +=2));
System.out.println( i+ " " + k);
}
}
为什么该计划的结果是:3 1
答案 0 :(得分:4)
&&
和||
是短路运营商,这意味着:
&&
中,如果左侧是false
,则不评估右侧。||
中,如果左侧是true
,则不评估右侧。虽然&
和|
是按位运算符,但这意味着双方都会被评估。
有了这个,让我们执行每个操作:
r = (t & 0 < (i +=1));
//true & i +=1 -> i = 1
r = (t && 0 < (i +=2));
//true && i+=2 -> i = 3
r = (t | 0 < (k +=1));
//true | k +=1 -> k = 1
r = (t || 0 < (k +=2));
//true || ... no need to evaluate right side
答案 1 :(得分:0)
|管道是按位运算符。即使第一个为真,它也会尝试执行这两个条件。 而||如果任何先前条件成立,管道将不会检查其余条件。 i的值变为3,因为&amp;&amp;只有在所有条件都成立的情况下才会成立。
r =( t &amp; 0&lt;(i + = 1))
r =( t &amp;&amp; 0&lt;(i + = 2))
r =( t | 0&lt;(k + = 1))
r =( t || 0&lt;(k + = 2))
将执行以粗体显示的条件。