黑马程序员技术交流社区
标题:
求大神解释:运算符的优先顺序
[打印本页]
作者:
艾维苏
时间:
2014-12-24 08:07
标题:
求大神解释:运算符的优先顺序
我们都知道代码:
int a=3,b;
b=a++;
打印结果为a =4,b=3;
如果上面写为:
int a=3,b;
b=(a++);
打印结果为何 b 也是3那?
延伸一下:
int i=0;
while((i++)<10)
{
System.out.println("i="+i);
}
System.out.println("i="+i);
i 又是如何打印,i的最终值又是多少那?
以上还请大神帮忙解释一下由来,十分感谢!!
作者:
黑马-李权88
时间:
2014-12-24 08:25
关注,我也是有这样的疑问,小括号不是把b++括起来了,不是应该先执行的吗
作者:
kerner
时间:
2014-12-24 12:58
说一下自己的理解,b为什么等于3,每个运算符号和操作数运算后都会有一个值,( )也是一个运算符,优先级较高,它也应该有一个值,该值就是它里面表达式运算完后的结果。它里面的表达式a++先运算,a++运算会有一个结果,该结果就等于a原来的值,而不是加1后的新值。
作者:
不落星辰
时间:
2014-12-24 13:38
b=a++;
a++是后自增
不就等于a原来的值了
作者:
艾维苏
时间:
2014-12-24 13:54
kerner 发表于 2014-12-24 12:58
说一下自己的理解,b为什么等于3,每个运算符号和操作数运算后都会有一个值,( )也是一个运算符,优先级较 ...
还是不太理解。如果(a++)先运算的话,为何不是吧运算后的结果赋值给b?
我这样理解的:自增++运算符的优先性 本来就比 赋值运算= 和 比较运算符< 的高;
b =(a++) 就 <=> b= a++;
while ((i++ )<100) <=> while (i++ <100);
所以加( ) 和没有加( ) 是没有区别。
但是问题来了,这就成了一个 违背运算符优先顺序 的 一个例子(特殊例子?)。
究其原因,就还需请大神解释了。
作者:
kerner
时间:
2014-12-24 15:05
如果(a++)先运算的话,为何不是吧运算后的结果赋值给b?
因为()作用后的结果就是内部表达式的结果的值,也就是a++表达式的值,编译器在计算a++时,先会创建一个临时变量tmp,然后把a的值3赋给临时变量tmp,然后a自增1,此时a= 4,但是a++整个表达式的值是临时变量的值3。所以()作用后的结果就是3.
++运算符号优先级高于赋值=运算符。所以加括号和不加没有区别。
记住每个运算符运算后都会有一个结果。
i++ < 100 和(i++) < 100也没有区别,
因为 <的优先级比++低。
所以在比较前,两者都是先做自增(i++)运算。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2