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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 傅宇 中级黑马   /  2012-10-28 00:46  /  1484 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 不会耍筷子 于 2012-10-28 01:02 编辑

int x = 1,y = 1;

if(x++==2 && ++y==2)
{
        x =7;
}
System.out.println("x="+x+",y="+y);

求解为什么输出结果是x=2,y=1

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

4 个回复

倒序浏览
先计算x++==2 ,运算过程 1 == 2  然后 x自加1  x=2;结果为false,&&是短路与,前面为false,后面的++y==2 不再计算

条件不成立 所以输出 x=2,y=1

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
首先要明确&&的运算规则:a&&b,是这样的,假如a为真,那么还要判断b是否为真;但是假如a为假,那么这个式子将不会再去判断b的真假,而是直接出结果为假。
回到这个题
                int x = 1,y = 1;
               if(x++==2 && ++y==2)
其中x++==2&&++y==2,先看&&左边是真是假,x++==2,先判断x==2?然后x再加1,显然x!=2,所以&&左边为假。然后X变成2.由于&&左边为假,所以右边不计算,即y还是1.所以打印结果是x=2,y=1

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
程序运行到“x++==2“时 x++是等于1的  所以的结果为false (然后x执行++的操作x=2) 而用的连接符为&&所以具有短路的效果  后面的不再执行,所以if得到的条件”x++==2&&++y==2“为false, 语句块中的内容不被执行   输出结果时x的值为2 y的值为1.

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
这道题用的是双与运算,会有短路现象。也就是说,前面的不成立,不会运算后面的。
if(x++==2 && ++y==2)  这里,首先是x先去值,x=1,不等于2,但是这里它有一个自增运算,所以x=2.
所以打印结果为x=2,y=1.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马