A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜超 高级黑马   /  2013-2-24 11:09  /  2217 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜超 于 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怎么运算出来的?求解?

7 个回复

倒序浏览
x先自增为1与y比较为true(然后y自减1),x++==1为true
先判断后自加,由于前面都是true 遇到 || 符号,后面就不判断了
所以x=2,y=0
回复 使用道具 举报
首先明白:
++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;
回复 使用道具 举报
  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;
回复 使用道具 举报
++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,那么右边不参与运算。
回复 使用道具 举报
++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:08
7#
逍林游 发表于 2013-2-24 11:22
首先明白:
++x:表示先将x自增然后再参与运算
x++:表示先参与运算然后自增

哦,明白了,主要是x++==1这块我弄错了,运算到这x=1了,我还以为还是初始化值0呢?多谢大虾指教!
回复 使用道具 举报
杜超 高级黑马 2013-2-24 11:52:06
8#
多谢各位大虾指教了,小弟明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马