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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

马日花

初级黑马

  • 黑马币:0

  • 帖子:10

  • 精华:0

© 马日花 初级黑马   /  2013-3-27 23:30  /  1752 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马日花 于 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值为什么自增了 ?  

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

9 个回复

倒序浏览
虽然不执行里面的内容,但是你也说判断结果为false,那不是就说 小括号里的&左右两边是运算了嘛,那不就说x++和++y是运算了嘛,那不就是说x,y自增了么,那不就等于2,2了嘛

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

回复 使用道具 举报
与判断两边都判断,判断完结果为false,但是此时x,y 已经自增了!注意:if语句里面的x++是后自增,y是前自增!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
这个问题是这样的,因为x++==2 & ++y==2;if不满足而返回false是对的,但是在x++和++y进入判断语句时,x和y的值都会增加1的;x先判断后后加1,而y是先加1后判断;
所以到最后:x=2  ; y=2;返回false仅仅只是不进入if体中而已;

如果有疑问继续追问,先睡觉了。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
不知道你要算什么值你的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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
if(x++==2 & ++y==2)      x先和2比较,发现1=2不对,然后自加1运算,所以X=2,&没有短路功能,x++==2结果为false,还要继续执行++y=2,因为++为前缀,所以y先自加1运算,再与2进行比较 2=2  正确。  所以结果为2   2  。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
请及时追问,或将帖子分类改成【已解决】哦~
回复 使用道具 举报
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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
&没有短路功能,其两边的表达式都会被判断,可以用&&代替,这样只要&&前面的表达式能决定结果,其后面的表达式将不会被执行,这会提高程序的执行效率

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马