黑马程序员技术交流社区
标题:
关于计算中的赋值和优先级问题
[打印本页]
作者:
逆袭的风
时间:
2013-7-31 22:48
标题:
关于计算中的赋值和优先级问题
本帖最后由 逆袭的风 于 2013-7-31 23:36 编辑
运行如下程序:
class Test
{
public static void main(String[] args)
{
int a=5;
int b=5;
int c=2*(++a)+a;
int d=b+2*(++b);
System.out.println("a="+a+"\tb="+b+"\tc="+c+"\td="+d);
}
}
/*
运行结果
a=6 b=6 c=18 d=17
*/
c和d中的赋值和计算的先后顺序是什么?
按结果来看c中a是先自加一然后参与运算,而d中b前面先赋值2,后面有自加1然后运算.
这是为什么?
作者:
手心里的温柔
时间:
2013-7-31 23:00
c: ++a a自加一后a的值变为6 2*6+6=18
d: b的初始值为5 然后b自加一后b值为6 5+2*6=17
希望能帮到你 共同学习哈
作者:
柏圣杰
时间:
2013-7-31 23:29
这个是涉及到前++和后++运算的优先问题;
前++和后++在单独的语句中两个的效果是一样的.
如:a++;和++a;效果一样
在跟其他运算在一个语句中运算时有区别
区别在于:
前++,是先计算自增,如 int x,b=1; x=++b+b+b;其中的b自增1然后参与运算,即其中的b都换成2,参与运算
后++,是先计算其他的语句,语句结束后,再自增1..如int x,b=1; x=b+b+b++; 其中的b都是以1参与运算,这条语句结束后,b再变成2
作者:
dicegame
时间:
2013-7-31 23:36
int c=2*(++a)+a;
int d=b+2*(++b);
运算时有优先级,但扫描表达式时没有优先级
计算c时,从左到右扫描,先碰到++a,这时a变成了6,然后碰到a(此时a的值已变为6)
所以c = 2*6+6=18
计算d时,先碰到b,这个b的值为5,然后碰到++b,这时b的值变为了6(但前面的b仍然是5)
所以c = 5+2*6=17
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2