黑马程序员技术交流社区
标题:
输出结果不明白?
[打印本页]
作者:
杜超
时间:
2013-2-24 11:09
标题:
输出结果不明白?
本帖最后由 杜超 于 2013-2-24 11:59 编辑
lass Demo
{
public static void main(String[] args)
{
int x=0,y=1;
if(++x==y--&x++==1||--y==0)
System.out.println("x="+x+",y="+y);//x=2,y=0
else
System.out.println("y="+y+",x="+x);
}
}
输出结果y=0明白,x=2不明白。大家看看我哪分析的不对:++x==y--&x++==1,x先自增为1与y比较为true(然后y自减为1),x++==1为false,所以++x==y--&x++==1为false,||右边参与运算,--y==0为true,所以执行System.out.println("x="+x+",y="+y);输出x=2,y=0,我算的是x=1,y=0,再说x的初始化值为0,自增只能为1,不明白x=2怎么运算出来的?求解?
作者:
李挺
时间:
2013-2-24 11:15
x先自增为1与y比较为true(然后y自减1),x++==1为
true
,
先判断后自加,由于前面都是true 遇到 || 符号,后面就不判断了
所以x=2,y=0
作者:
逍林游
时间:
2013-2-24 11:22
首先明白:
++x:表示先将x自增然后再参与运算
x++:表示先参与运算然后自增
再来分析:
int x=0,y=1;
if(++x==y--&x++==1||--y==0) 这几句:
++x==y--:此时x=1,y=1.所以是true,然后y--,y=0.
x++==1:此时x==1,所以是true,然后x++,x=2.
前面都是true了后面是“||”运算符时,“||”运算符后面的就不再执行。
根据以上分析:x = 2,y = 0;
作者:
陈圳
时间:
2013-2-24 11:25
if(++x==y--&x++==1||--y==0)
System.out.println("x="+x+",y="+y);//x=2,y=0
++x //此时x=1;
表达式++x==y-- 为true;
x++==1 此时:true x=2;y=0
if表达式的语句是这样的if((++x==y--)&&(x++==1||--y==0))
||:短路与运算,左边为true/右边不参与运算.所以输出结果:x=2;y=0;
作者:
谢波
时间:
2013-2-24 11:29
++x==y--为true,y--是先判断然后再自减1 x=1 y=0
x++ == 1为true,x++是先判断是否==1然后再自增1 x=2
|| 双或号表示,只要前面的表达式为真,后面的就不用再判断了
所以--y == 0这句话没有执行,所以y还是0
所以执行的是这句话:System.out.println("x="+x+",y="+y);//x=2,y=0
总结:
自增自减在前面就先自增自减再做其他运算
自增自减在后面则相反
& 和 &&区别:
& :无论左边结果是什么,右边都参与运算。
&&:短路与,如果左边为false,那么右边不参数与运算。
| 和|| 区别:
|:两边都运算。
||:短路或,如果左边为true,那么右边不参与运算。
作者:
寇弘禄
时间:
2013-2-24 11:32
++x先自增在判断等号,x++先判断完等号后再自增。
++x后x为1,
然后判断1==y(相等),
然后y--,y=0,(&符号不管左边是真是假右边都执行,&&如果左边是假则右边不执行。)
然后判断x==1,此时x的值还是1,所以x==1为真,然后x还要自增一次,所以x变为2,
因为||符号一真则真,所以右边不在判断。
结果x=2,y=0
作者:
杜超
时间:
2013-2-24 11:50
逍林游 发表于 2013-2-24 11:22
首先明白:
++x:表示先将x自增然后再参与运算
x++:表示先参与运算然后自增
哦,明白了,主要是x++==1这块我弄错了,运算到这x=1了,我还以为还是初始化值0呢?多谢大虾指教!
作者:
杜超
时间:
2013-2-24 11:52
多谢各位大虾指教了,小弟明白了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2