黑马程序员技术交流社区
标题:
关于++的问题
[打印本页]
作者:
傅宇
时间:
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