关于java中运算符的问题?

时间:2014-06-10 04:26:18

标签: java operators

我有一节课:

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

2 个答案:

答案 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))

将执行以粗体显示的条件。