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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许飞翔 中级黑马   /  2012-3-15 23:20  /  2216 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Test
  2. {  
  3.     public static void main(String[] args)
  4.   {  
  5.         int k = 0;  
  6.         int b = ++k + k++ + ++k + k;  
  7.         System.out.println(b);  
  8.    }  
  9. }
复制代码
结果是8.为什么是这个结果?详细步骤是怎样的?

6 个回复

正序浏览
int k = 0;
int b = ++k + k++ + ++k + k;
最开始给k赋值为0; ++k 是先加再运算 (int b = ++k) = 1;
                      ( + k++ )是先运算在加1 这时候 (int b = ++k + k++ ) 等于{int b = 1 + ( 0+1)};                     
                     (+ ++k) 第一个k和第二个k运算后,第三个k没元算本身就等于2 由于是先加1在运算,所以{int b = ++k + k++ + ++k} 等于{int b = 1 + ( 0+1) +  (1+2)};
                      (+ k)第四个k没有做任何的加1, 第三个k运算完了已经等于3了, 所以第四个k就等于3, {int b = ++k + k++ + ++k + k}={(1) + (1) + (3) + (3)}
回复 使用道具 举报

RE: 有关先加和后加问题求解

本帖最后由 liuhao411 于 2012-3-16 00:29 编辑

我认为很简单,分成4部分,加括号就容易区分了。分别为1 1 3 3就行了。
回复 使用道具 举报
++k:是将k的值加1 以后再参加运算
k++:是先将k的值参加运算后再加1;
int b = ++k + k++ + ++k + k;//这句话运行到第一个++k,这时候k的值是1,下个+k++这个时候的k还是1参与运算的,当运算完后这个时候K的值就是2,+++k这个时候的k就是3,下个+k,k的值还是3. 所以运算结果就是1+1+3+3=8
回复 使用道具 举报
本帖最后由 李爱军 于 2012-3-15 23:42 编辑

版主回答的简洁明了,呵呵,我作下解释把
int b = (++k1) + (k2++ )+ (++k3) + k4;  
为了方便我做了如上标记和分割
先要明确下面几点
1,++k:先引用k的值在使k的值增加1;
2,k++;先使k的值增加1,在赋给k;
3,++的运算优先级比+高

++k1-->k1=0+1
k2++ -->k2=k1,再次引用k2的值就是k2=k1+1=2
++k3-->k3=k2+1=3
k4=k3=3;
最后算简单的加法 int b=1+1+3+3;
回复 使用道具 举报
本帖最后由 倪鹏博 于 2012-3-15 23:34 编辑

++k是先自加再用于计算,k++刚好相反是先用于计算再自加
所以:
int b=
         ++k //先自加再运算,所以参与运算的时候k=1
     + k++ //先运算再自加,所以参与运算的时候k=1,之后k=2
     + ++k //先自加再运算,所以参与运算的时候k=3
     + k;    //k=3

综上, b=8

回复 使用道具 举报
int b = ++k + k++ + ++k + k;  

             1      1            3       3

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