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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙浩 于 2012-6-23 12:22 编辑

int a = 2;
int b = (a++)+ 3*a
我的疑问是:a++不是应该是先运算后自加吗,那结果应为8呀。
但是为何打印结果却为11呢

8 个回复

正序浏览
这个主要是考验对++符号的理解了。

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 了。
回复 使用道具 举报
王涛 黑马帝 2012-6-23 00:38:41
8#
int a = 2;
int b = (a++)+ 3*a

a=2,a++过后,a=3,这时3*a中的a已经是3了,所以结果是11
回复 使用道具 举报
位雪 中级黑马 2012-6-23 00:21:23
7#
a++:先用后加,第一个a是2,使用之后,第二a的值已经是a++后的值3,所以最后运行的结果就是11.
回复 使用道具 举报
int a = 2;
int b = (a++)+ 3*a

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

所以 a++ 过后  第二个a的值就为3了  最后的结果就是 (2)+3*3  就是 11 了
回复 使用道具 举报
int b = (a++)+ 3*a是从左到右运算的,a++是先使用a的值,再将a加1,
所以a++的值是2,之后a=3,最后得到的结果是2+3*3=11
回复 使用道具 举报
java中运算符顺序中,算术运算符++在*前面,所以在你这程序中先运行a++=2;a=3. 再b=2+3*3;
回复 使用道具 举报
a++就是先用后加,你第一个a就是先使用了所以第一个a的值就是2,第二a的值已经是a++后的值了就是3了,所以最后运行的结果就是11.
回复 使用道具 举报
a++  先使用再加1 因此第一个a是2 后面那个就是3了

表达式就相当于 2+3*3
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马