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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑龙江—刘鹏 初级黑马   /  2012-7-3 12:36  /  2254 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 412647737 于 2012-7-3 13:40 编辑






  • class zlianxi1
    {
    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);
    }
    }



    主要是 x=7; 是有何用
这个过程是如何实现的?{:soso_e116:}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

17 个回复

倒序浏览
输出为x=2,y=1
if (x++ == 2 && ++y == 2)
\\这里x++ == 2为false,x值自增为2,因为使用&&,所以没有执行++y == 2,因此y还是等于1
x=7是为了验证(x++ == 2 && ++y == 2)是否成立

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
是不是 if 内的为 x+1 然后通过&&认定正确不继续下读 但是 x=7是跳过了吗
回复 使用道具 举报
本帖最后由 何旭栋 于 2012-7-3 12:52 编辑
412647737 发表于 2012-7-3 12:47
是不是 if 内的为 x+1 然后通过&&认定正确不继续下读 但是 x=7是跳过了吗

x=7跟在if语句后面,自然是要if判断为true才执行
例如:
if (x>0)
{
x--;
}
可以这样写:
if (x>0)
    x--;
只用一句的时候和一不用大括号都行
回复 使用道具 举报
哦了 if 内的 x++==2 结果为true 就不读取x=7的值了 对不对(⊙_⊙)?
回复 使用道具 举报
何旭栋 发表于 2012-7-3 12:50
x=7跟在if语句后面,自然是要if判断为true才执行
例如:
if (x>0)

哦了 :handshake
回复 使用道具 举报
x=1,y=1 执行if语句后x=2 y=1(因为x=1时与2做判断,结果为false,x自增1;&&左边是false,右边就不做运算了,然后执行x=7,所以结果应该是x=7 y=1.
回复 使用道具 举报
黑马-李勇 发表于 2012-7-3 13:04
x=1,y=1 执行if语句后x=2 y=1(因为x=1时与2做判断,结果为false,x自增1;&&左边是false,右边就不做运算了 ...

啊 仁兄 你把代码打印一下看看 结果却是 x=2y=1
可能是 x++漏掉了吧
回复 使用道具 举报
这个题是典型的考察 x++ 和 ++x的区别的
x++ 是先取值 后加 即x++ 整体是等于 x 的,儿x的值本身自加一了如 x=1则x++ == 1 但是x==2;
++x 是先加后取值  如 x=1则 ++x==2且x==2
x=7 这句话没有执行 因为  if(x++==2 && ++y==2) 此条件为假所以没有执行(x++=1)
此程序运行结果应该是x=2,y=2
回复 使用道具 举报
杨朔 发表于 2012-7-3 13:12
这个题是典型的考察 x++ 和 ++x的区别的
x++ 是先取值 后加 即x++ 整体是等于 x 的,儿x的值本身自加一了如 ...

谢谢 啊 我懂了
回复 使用道具 举报
本帖最后由 邵阳 于 2012-7-3 13:39 编辑

class lianxi
{
public static void main(String[] args)
{
    int x=1,y=1;
    if(x++==2 && ++y==2)
   { x=7;}                             //在这里你省略了{},则if在不加{}情况下,默认执行第一句话。
    System.out.println("x="+x+",y="+y);
}
}
我编了两段代码
1:class  Demo
{
public static void main(String[] args)
{
int x=1,y=1;
System.out.println("x++==2:"+(x++==2)+"...."+"++y==2:"+(++y==2) );

}
}
结果是x++==2:false....++y==2:true
所以可以看你的代码,x++==2 && ++y==2,&&是短路,当前面判断是false时,后面的不需要判断,也就是说++y都没有执行,所以你代码里面的if判断语句是错误的,就不执行语句x=7.
2:class  Test
{
public static void main(String[] args)
{
int x=1;
x++;
System.out.println("x:"+x );

}
}
结果是x:2
所以 System.out.println("x="+x+",y="+y);打印出的是x=2,y=1.   

如果没有
x=7;
因为if判断是错误的就默认不执行
System.out.println("x="+x+",y="+y);
结果就不会打印任何东西

说一下自增前自增后的区别:
自增(后)a=2;b=++a;      a=3;b=3
自增(前)a=2;b=++a;       a=3;b=2

x++==2   是错误的,因为此时x=1.
++y==2 是正确的,因为此时y=2.但是根本执行不到这里,就短路啦。
最后打印结果是只有x自增啦,是2


回复 使用道具 举报
邵阳 发表于 2012-7-3 13:27
class lianxi
{
public static void main(String[] args)

嗯 是 2 和1 我也打印了一次
回复 使用道具 举报
412647737 发表于 2012-7-3 13:16
谢谢 啊 我懂了

你都没懂好吧,他的回答是错误的,结果是x=2,y=1
回复 使用道具 举报
邵阳 发表于 2012-7-3 13:32
你都没懂好吧,他的回答是错误的,结果是x=2,y=1

嘿嘿 我给你表达一次
if内 x++==2 是先看的x=1 然后才给x+1 用的是x=1来比较 ==2 结果为false &&短路后不考虑y值 依然是1
因为记过为false所以不执行if下一段代码 或者 if 内的{} 部分 所以 x=2 y=1 大哥 您看如何
回复 使用道具 举报
谢谢啊 综合了你俩的我终于明白咯
回复 使用道具 举报
如果x++=2表达式是假的话,后面++y就不执行了,因为那样再比较后面已经没有意义了,如果x++=2是真的话,后面++y还继续执行,感觉只要这样理解就行了
回复 使用道具 举报
哦,对不起,是我错了,if条件为false,x=7不执行,结果是x=2,y=1
回复 使用道具 举报
嘿嘿 {:soso_e113:} 互相帮助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马