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
{
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
楼主截止到2008-06-17 21:10:44的汇总数据:
发帖数:1
结贴数:0
结贴率: 0.00%
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
i++的时候i为0,执行以后i为1,所以b为false,同时&&后面的条件不再判断,j不变
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
同理进行下面的分析
i++>0
这里i++在>前面,那为什么不是先计算i++难后再把i++的值于0比较
第三句:&&运算左边为真,所以执行右边的表达式;
第四句:||运算左边为真,右边表达式所以不执行了。
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
他会先用原值操作后再加1
所以在第一次0>0是错的说以&&运算符采用懒惰法就没给j++运算
后来就一次类推了
i++>0
等价与
{
j=i;
i>0;
i=i+1;
return j;
}++i
等价与
{
i=i+1;
i>0;
return i;
}
错了。比较原始的是
i++
等价与
j=i;
i=i+1;
return j;
然后用j与0比++i
等价与
i=i+1;
return i;
然后用i与0比