黑马程序员技术交流社区

标题: 有关先加和后加问题求解 [打印本页]

作者: 许飞翔    时间: 2012-3-15 23:20
标题: 有关先加和后加问题求解
  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.为什么是这个结果?详细步骤是怎样的?
作者: 房宝彬    时间: 2012-3-15 23:25
int b = ++k + k++ + ++k + k;  

             1      1            3       3


作者: 倪鹏博    时间: 2012-3-15 23:30
本帖最后由 倪鹏博 于 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


作者: 李爱军    时间: 2012-3-15 23:40
本帖最后由 李爱军 于 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:45
++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-16 00:28
标题: RE: 有关先加和后加问题求解
本帖最后由 liuhao411 于 2012-3-16 00:29 编辑

我认为很简单,分成4部分,加括号就容易区分了。分别为1 1 3 3就行了。
作者: a504079589    时间: 2012-3-16 01:50
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)}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2