黑马程序员技术交流社区
标题:
if 作用范围问题
[打印本页]
作者:
马日花
时间:
2013-3-27 23:30
标题:
if 作用范围问题
本帖最后由 马日花 于 2013-3-28 22:52 编辑
int x = 1,y = 1;
if(x++==2 & ++y==2)
{
x =7;
}
System.out.println("x="+x+",y="+y);
问题是:为什么 x = 2, y = 2 ,而不是 1 ? if 语句是判断语句,结果为false ,所以不执行里面的内容。但为什么输出的x、y值为什么自增了 ?
作者:
Keith
时间:
2013-3-27 23:43
虽然不执行里面的内容,但是你也说判断结果为false,那不是就说 小括号里的&左右两边是运算了嘛,那不就说x++和++y是运算了嘛,那不就是说x,y自增了么,那不就等于2,2了嘛
作者:
于腾飛
时间:
2013-3-27 23:43
与判断两边都判断,判断完结果为false,但是此时x,y 已经自增了!注意:if语句里面的x++是后自增,y是前自增!
作者:
_王涛
时间:
2013-3-27 23:46
这个问题是这样的,因为x++==2 & ++y==2;if不满足而返回false是对的,但是在x++和++y进入判断语句时,x和y的值都会增加1的;x先判断后后加1,而y是先加1后判断;
所以到最后:x=2 ; y=2;返回false仅仅只是不进入if体中而已;
如果有疑问继续追问,先睡觉了。
作者:
邵震
时间:
2013-3-27 23:47
不知道你要算什么值你的x=7完全就是没用的
class java0327d5
{
public static void main(String[] args)
{
int x = 1,y = 1;
if(x++==2 & ++y==2)
{
//x =7;
}
System.out.println("x="+x+",y="+y);
}
}
复制代码
作者:
张宝
时间:
2013-3-28 00:21
if(x++==2 & ++y==2) x先和2比较,发现1=2不对,然后自加1运算,所以X=2,&没有短路功能,x++==2结果为false,还要继续执行++y=2,因为++为前缀,所以y先自加1运算,再与2进行比较 2=2 正确。 所以结果为2 2 。
作者:
陈丽莉
时间:
2013-3-28 00:30
请及时追问,或将帖子分类改成【已解决】哦~
作者:
疯狂程序
时间:
2013-3-28 01:19
nt x = 1,y = 1;
if(x++==2 & ++y==2)
{
x =7;
}
System.out.println("x="+x+",y="+y);
蕴含知识点
1.x++为先赋值后运算
2.&与&&区别(&前后都执行,&&为短路,前false,后不执行)
先赋值所以if语句不成立
但是&两边都判断,所以x++,y++
结果x = 2,y =2
作者:
HM马明宇
时间:
2013-3-28 15:40
&没有短路功能,其两边的表达式都会被判断,可以用&&代替,这样只要&&前面的表达式能决定结果,其后面的表达式将不会被执行,这会提高程序的执行效率
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2