public static void main(String args[])
  {
boolean b;
int i=0,j=0;
b=i++>0 && ++j>0;
System.out.println(b+" "+i+" "+j);
i=j=0;
b=i++>0 || ++j>0;
System.out.println(b+" "+i+" "+j);
i=j=1;
b=i++>0 && ++j>0;
System.out.println(b+" "+i+" "+j);
i=j=1;
b=i++>0 || ++j>0;
System.out.println(b+" "+i+" "+j);
  }为什么会输出
false 1 0
true 1 1
true 2 2
true 2 1

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主截止到2008-06-17 21:10:44的汇总数据:
    发帖数:1
    结贴数:0
    结贴率: 0.00%
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    第一句。&&运算只有当左边为true才会执行右边的表达式,所以对于i++>0,实际i>0;i=i+1;返回false。第二句。||运算只有当左边为false时才会执行右边的表达式,同理,这次它执行了++j>0,也就是j=j+1;j>0.以下同理
      

  3.   

    b=i++>0 && ++j>0;
    i++的时候i为0,执行以后i为1,所以b为false,同时&&后面的条件不再判断,j不变
      

  4.   

    int i=0,j=0; 
    b=i++>0 && ++j>0; 
    i++的意思是先i进行运算,再加一,而++j是j先加一,再进行运算,所以此时(i++>0)=false,所以b=false,i=1,j=1
    i=j=0; 
    b=i++>0 ¦ ¦ ++j>0; 
    同理,||只要有一个是true,就是true,此时++j>0为true,所以b=true
    同理进行下面的分析
      

  5.   

    还有一点不懂
    i++>0
    这里i++在>前面,那为什么不是先计算i++难后再把i++的值于0比较
      

  6.   

    i++>0这个表达式处理完了再处理++操作。
      

  7.   


    第三句:&&运算左边为真,所以执行右边的表达式;
    第四句:||运算左边为真,右边表达式所以不执行了。
      

  8.   

    自增运算符如果在左边就先自增,然后再参与其它运算,在右边则先参与其它运算再自增例如:
    int i = 1;
    int j = 1;
    i = ++i + j++;
    System.out.println(i);i = 1;
    j = 1;
    j = i-- + --j;
    System.out.println(j);输出结果为:
    3
    1
      

  9.   

    因为I++为单目运算符在与其他运算符一起操作时
    他会先用原值操作后再加1
    所以在第一次0>0是错的说以&&运算符采用懒惰法就没给j++运算
    后来就一次类推了
      

  10.   

    这是一道好题目啊.既能明白i++与++i,还能搞清楚&&和||是怎么处理的.好题
      

  11.   


    i++>0
    等价与
    {
        j=i;
        i>0;
         i=i+1;
        return j;
    }++i
    等价与
    {
       i=i+1;
       i>0;
       return i;
    }
      

  12.   


    错了。比较原始的是
    i++
    等价与
    j=i;
    i=i+1;
    return j;
    然后用j与0比++i
    等价与
    i=i+1;
    return i;
    然后用i与0比
      

  13.   

    短路运算,当&&左边为false时,就不执行右边的运算了。