黑马程序员技术交流社区

标题: 一个运算题,求解释过程。。 [打印本页]

作者: 周四川    时间: 2012-4-26 14:18
标题: 一个运算题,求解释过程。。
  1. public class test1 {
  2. public static void main(String[] args) {
  3. int j=0;

  4. int a=0;

  5. int b=a++ + j++ + ++j;

  6. System.out.println(j);

  7. System.out.println(a);

  8. System.out.println(b);

  9. }
  10. }
复制代码
运行的结果是:
2
1
2
求解释程序的运算过程。。主要是那个b为啥等于2?
作者: 倪杭乘    时间: 2012-4-26 14:27
运算顺序从左到右
a++ 先参与运算(0)再加1(如果a++右边有用到a,那么a的值就是在1的基础上操作)
j++同a,0参与运算,j变成1
++j先自增再运算 j从1的基础上加1 等于2
所以 b是2 a是1 j是2
作者: 高彰谦    时间: 2012-4-26 14:34
  1. //                int b=a++ + ++j + j++ ;
  2.                 int b=0;
  3.                 {
  4.                         j+=1;
  5.                         b=a+j+j;
  6.                         a+=1;
  7.                         j+=1;
  8.                 }
复制代码
同学,我把它替换了,这下应该清楚了吧
作者: 张小庆    时间: 2012-4-26 14:40
int b=a++ + j++ + ++j;
这句代码真正的算术运算是0+0+2
j++运算完后j为1,然后到++j时,运算前再加1,就为2了啊
作者: 周四川    时间: 2012-4-26 14:47
倪杭乘 发表于 2012-4-26 14:27
运算顺序从左到右
a++ 先参与运算(0)再加1(如果a++右边有用到a,那么a的值就是在1的基础上操作)
j++同a,0 ...

好吧,我是从右往左计算的。。。谢谢给纠正了。。
作者: 马浩    时间: 2012-4-26 14:49
public class test1 {

public static void main(String[] args) {

int j=0;



int a=0;



int b=a++ + j++ + ++j;//a先和j相加等于0,然后自增得a=1,j=1;再和++j运算,j先自增得2,  0+2=2赋给b



System.out.println(j);



System.out.println(a);



System.out.println(b);



}

}
//等号右边的加法运算从左到右一项一项的加,结果就出来了j=2,a=1,b=2
作者: 李斌    时间: 2012-4-26 15:39
受教了

作者: 翟友伟    时间: 2012-4-26 15:53
int b=a++ + j++ + ++j;

起始值j=0 ,
j++   后 j=1 .
++j   没运算前 j=1+1=2;
b= 0+0+2
   ++x 先     x++后   很容易理解的
作者: 付左军    时间: 2012-4-26 16:08
了解自增的顺序,a++先赋值在自增,++ j先自增在运算所以
int b=a++ + j++ + ++j;
运算过程是a,j相加为0,后自增。和自增后的J相加结果为2




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