黑马程序员技术交流社区

标题: 麻烦帮我解释一下运算结果为什么是这样? [打印本页]

作者: 孙浩    时间: 2012-6-22 23:50
标题: 麻烦帮我解释一下运算结果为什么是这样?
本帖最后由 孙浩 于 2012-6-23 12:22 编辑

int a = 2;
int b = (a++)+ 3*a
我的疑问是:a++不是应该是先运算后自加吗,那结果应为8呀。
但是为何打印结果却为11呢
作者: 丁二跃    时间: 2012-6-22 23:55
a++  先使用再加1 因此第一个a是2 后面那个就是3了

表达式就相当于 2+3*3
作者: 薄炳鑫    时间: 2012-6-23 00:02
a++就是先用后加,你第一个a就是先使用了所以第一个a的值就是2,第二a的值已经是a++后的值了就是3了,所以最后运行的结果就是11.
作者: 吴小铁你好    时间: 2012-6-23 00:04
java中运算符顺序中,算术运算符++在*前面,所以在你这程序中先运行a++=2;a=3. 再b=2+3*3;
作者: 王晓新    时间: 2012-6-23 00:06
int b = (a++)+ 3*a是从左到右运算的,a++是先使用a的值,再将a加1,
所以a++的值是2,之后a=3,最后得到的结果是2+3*3=11
作者: 余银桂    时间: 2012-6-23 00:20
int a = 2;
int b = (a++)+ 3*a

这是一个优先级问题,++ 的优先级高于 + - * /

所以 a++ 过后  第二个a的值就为3了  最后的结果就是 (2)+3*3  就是 11 了
作者: 位雪    时间: 2012-6-23 00:21
a++:先用后加,第一个a是2,使用之后,第二a的值已经是a++后的值3,所以最后运行的结果就是11.
作者: 王涛    时间: 2012-6-23 00:38
int a = 2;
int b = (a++)+ 3*a

a=2,a++过后,a=3,这时3*a中的a已经是3了,所以结果是11
作者: 曾_强    时间: 2012-6-23 04:27
这个主要是考验对++符号的理解了。

int b = (a++) + 3*a 可以将括号中a++分开来看成一个变量c;

即:

int c = a++;  //在执行完这一句之后,c = 2; 而 a = 3; 因为++运算是先取值后自加,那么 c的值就是2,而a的值变成了3。
int b = c + 3*a;  //此时a等于3;即 b = 2 + 3 *3 = 11

那么b = 2 + 3 * 3 = 11 了。




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