我要考JP了,估计还有一周吧,今天看模拟题的时候有个结果实在有些想不明白,请解释下,代码如下:
int i = 0, j = 1;
if ((i++ == 1) && (j++ == 2)) {
   i = 42;
}
System.out.println("i = " + i + ", j =" + j);
结果是i =1, j=1实在没想通这个结果,怎么执行的代码?高手请指点下!

解决方案 »

  1.   

    屏闭相与,只执行(i++ == 1)就已经是false了,没必要再执行判断(j++ == 2),所以j还是1,而i从0变到1了
      

  2.   

    i++执行了一次嘛,比较的时候i=0,逻辑与前半为否了,后半的就不运算了,j++ == 2被忽略了没有执行,所以i=1,j=1
      

  3.   

    i=0;
    a=i++;//这里i先把值赋给a,然后i再自己++
    b=i;//此时b=1
      

  4.   

    基础知识:
     int i1=0;   
     System.out.println( i1++);
     System.out.println( i1);输出是
    0
    1
    ----------------------------------------------------------
    当(i++ == 1)=false的时候(j++ == 2)没有执行 应为你用的是&&
    改成如下
    int i = 0, j = 1;
        if ((i++ == 1) || (j++ == 2)) { //还是false 没执行i=42 ,但执行了j++
           i = 42;
        }
        System.out.println("i = " + i + ", j =" + j);
    输出是
    i = 1, j =2
      

  5.   

    先看这句if ((i++ == 1) && (j++ == 2)) ,执行顺序,
    1.先比较i是否和1相等,(不等,因为i=0)
    2然后i变成1
    3&&又叫短路运算,如果前面的为false,后面的语句就不执行。所以结果是i =1, j=1
      

  6.   

    public static void main(String[] args) {
       int i = 0, j = 1;
       if ((++i == 1) && (++j== 2)) {
          i = 42;
       }
       System.out.println("i = " + i + ", j =" + j);
    }
    这样看一下就明白了