标题: 关于自加运算的优先级问题 [打印本页] 作者: 郑雪 时间: 2013-4-28 17:17 标题: 关于自加运算的优先级问题 看这几个代码
int a = 2;
int b = a + 3 * a++;
System.out.println(b);
打印结果是8。
int a = 2;
int b = a++ + 3 * a;
System.out.println(b);
结果是11。
int a = 1;
int b = 2;
System.out.println(a+++b);
结果是3。
可不可以帮忙分析一下运算符的优先级啊,这几个结果究竟是怎么运算出来的啊?作者: 吴波 时间: 2013-4-28 17:42
你这问题,最主要的没弄清楚a++的意思
你只要记:a++是先运算,再自增就好了
int a = 2;
int b = a + 3 * a++;//a是原值
System.out.println(a);//其实在这里可以打印下a的值,a=3
System.out.println(b);
打印结果是8。
int a = 2;
int b = a++ + 3 * a;//a先为原值2,由于a++运算完后等于3,所以后面3*a就为6
System.out.println(b);
结果是11。
int a = 1;
int b = 2;
System.out.println(a+++b);//同理a为原值1,再打印一次a就为2了
System.out.println(a);//2
结果是3。 作者: 绿树林 时间: 2013-4-28 17:52
三个算法的运算顺序如下
第一个:
a++
3 *(a++)
int b =a+(3 *(a++))
第二个:
a++
3 * a
int b = (a++) + (3 * a);
第三个:
a++
System.out.println((a++)+b);作者: 付鑫鑫 时间: 2013-4-28 19:49
首先,a++与++a的区别是:
例如: int a =1; 作者: 付鑫鑫 时间: 2013-4-28 19:56
首先,a++与++a的区别是:
例如: int a =1;
int b = a++; 此时的b的值为1; 先赋值运算,后自增
int b =++a; 此时的b的值为2; 先自增,而赋值运算
接下就是按照我们小学的运算法则去算.
int a = 2;
int b = a + 3 * a++;
b = 2 + 3*2++;
b = 8;
作者: 董波 时间: 2013-4-28 20:43
首先,可以明确的是优先级从高到底肯定是++、*、+。那么为什么会出现这么奇怪的输出呢,要搞明白这个需要明确两点:1、a++是先取a的值供计算式使用,然后a自加;2、a++自加后的值虽然不影响此时自己在表达式中的值,但会使表达式中位于其后的a值加1。比如你的三个算式:
int b = a + 3 * a++;
第一个a取值为2;第二个a取值也为2,所以b=2+3*2=8;
int b = a++ + 3 * a;
第一个a取值为2;第二个a取值时,受前面a++的影响,取值为3,所以b=2+3*3=11;
int a = 1;
int b = 2;
System.out.println(a+++b);
a取值为1,b取值为2,结果是3。
其实只要记住a++只影响其后的a值就OK啦。比如,要是把你第一个算式"+"两边的部分交换一下:
int b = 3 * a++ +a;
它的输出结果就会变成9其实这就是因为后面的a受到了前面a++的影响加了1.(有点不符合加法交换律哈) 作者: 邵彩华 时间: 2013-4-28 21:16 本帖最后由 邵彩华 于 2013-4-28 21:32 编辑