黑马程序员技术交流社区

标题: 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完全就是没用的
  1. class java0327d5
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 1,y = 1;

  6.                 if(x++==2 & ++y==2)  
  7.                 {
  8.                             //x =7;
  9.                 }
  10.                 System.out.println("x="+x+",y="+y);  
  11.         }
  12. }
复制代码

作者: 张宝    时间: 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