黑马程序员技术交流社区

标题: 关于++的问题 [打印本页]

作者: 傅宇    时间: 2012-10-28 00:46
标题: 关于++的问题
本帖最后由 不会耍筷子 于 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
作者: 黑马刘向阳    时间: 2012-10-28 00:50
先计算x++==2 ,运算过程 1 == 2  然后 x自加1  x=2;结果为false,&&是短路与,前面为false,后面的++y==2 不再计算

条件不成立 所以输出 x=2,y=1
作者: 打工人    时间: 2012-10-28 08:00
首先要明确&&的运算规则: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

作者: 442851994    时间: 2012-10-28 08:47
程序运行到“x++==2“时 x++是等于1的  所以的结果为false (然后x执行++的操作x=2) 而用的连接符为&&所以具有短路的效果  后面的不再执行,所以if得到的条件”x++==2&&++y==2“为false, 语句块中的内容不被执行   输出结果时x的值为2 y的值为1.
作者: 给生活加点料    时间: 2012-10-28 10:28
这道题用的是双与运算,会有短路现象。也就是说,前面的不成立,不会运算后面的。
if(x++==2 && ++y==2)  这里,首先是x先去值,x=1,不等于2,但是这里它有一个自增运算,所以x=2.
所以打印结果为x=2,y=1.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2