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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

int number = 100;           
int num = number-- + number++;
Console.WriteLine(num);
Console.ReadKey();

我认为num的值是200
可以怎么运算调试都是199
瞬间石化了,求解释啊,谢谢各位

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

10 个回复

倒序浏览
按照运算符的运算规则,++ -- 放在后面是 先运算后加减   所以 100 使用以后 number值为99  然后相加的值为199  
如果再输出console,writeline(number)  number的值为100  应为第二次使用之后自增,变成了100;

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
问题的解决方式有很多种,如果实在绕晕了,不妨使用简单的,易于理解的;
你可以通过设置断点去调试,这方式最直接,要不也可以如下理解,
比对for循环中的:
for(i = 0,i < 100, i++)
for(i = 99,i >= 0, i- - )

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
楼上说的都对,楼主在理解下
  1. package j2se_develop;

  2. public class LianXi{
  3.         public static void main(String[] args) {
  4.                 int num=100;
  5.                 num=       
  6.                         num--         // num--即100--等于99
  7.                         +
  8.                         num++;//此时num已变成99,再99++,就变成了100
  9.                 System.out.println(num);//99+100就等于199
  10.         }
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
李 玉林 来自手机 中级黑马 2012-9-15 10:23:15
报纸
其实楼主没必要纠结这种表达式  实际中很少用到
回复 使用道具 举报
楼上解答的都很对,多看看运算符的优先级和运算规则
回复 使用道具 举报
本帖最后由 刘俊红 于 2012-10-3 21:03 编辑
  1. int number = 100;           
  2. int num = number-- + number++;
  3. Console.WriteLine(num);
复制代码
为什么输出的是199而不是200?
这是表达式的副作用问题。

后增后减都是在参与运算后,自身再自增自减(这就是副作用)。

过程如下:
1.  number--在 + 运算时,number是100
2.  在+运算后,才自减成99,也就是此时的number++中的number是99。
3.  number++的副作用(自加)在整个赋值语句结束后才出现。

即是说,在第二句中,第一个number是100,第二个number其实是99.
当然,赋值运算结束后,number又自到100了。

同学认为number的两个++和--是在整个个赋值语句完后,才起作用。
事实上,第一个number的副作用在 +运算符 后就已经起作用了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
许波 中级黑马 2012-10-4 10:30:39
8#
擦,作为一个新手,我觉得这题对于理解算术优先级很不错啊...
回复 使用道具 举报
秦敖 中级黑马 2012-10-5 14:42:57
9#
对int num=number--+number++;进行拆分:int i=number--;//先引用后自减,这句执行后i值为100,number值为99
                                                             int j=number++;//先引用后自加,这句执行后j值为上句执行后number的值99,number值为100
                                                             int num=i+j;//99+100=199

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
int num = number-- + number++;//num = num
              (100)      + (99)    =  199
先执行number--,因为是后自减,所以先取自减前的值,也就是100,然后number的值自减为99,第二部执行number++,同样是后自加,所以取99,然后number自加为100

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
学习啦{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马