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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 艾维苏 中级黑马   /  2014-12-24 08:07  /  1361 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

我们都知道代码:
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的最终值又是多少那?
以上还请大神帮忙解释一下由来,十分感谢!!

5 个回复

倒序浏览
关注,我也是有这样的疑问,小括号不是把b++括起来了,不是应该先执行的吗
回复 使用道具 举报
说一下自己的理解,b为什么等于3,每个运算符号和操作数运算后都会有一个值,( )也是一个运算符,优先级较高,它也应该有一个值,该值就是它里面表达式运算完后的结果。它里面的表达式a++先运算,a++运算会有一个结果,该结果就等于a原来的值,而不是加1后的新值。
回复 使用道具 举报
b=a++;
a++是后自增
不就等于a原来的值了
回复 使用道具 举报
kerner 发表于 2014-12-24 12:58
说一下自己的理解,b为什么等于3,每个运算符号和操作数运算后都会有一个值,( )也是一个运算符,优先级较 ...

还是不太理解。如果(a++)先运算的话,为何不是吧运算后的结果赋值给b?
我这样理解的:自增++运算符的优先性 本来就比 赋值运算= 和 比较运算符< 的高;
b =(a++) 就 <=>  b= a++;
while ((i++ )<100)  <=> while (i++ <100);
所以加( ) 和没有加( ) 是没有区别。
但是问题来了,这就成了一个 违背运算符优先顺序 的 一个例子(特殊例子?)。
究其原因,就还需请大神解释了。
回复 使用道具 举报
如果(a++)先运算的话,为何不是吧运算后的结果赋值给b?
因为()作用后的结果就是内部表达式的结果的值,也就是a++表达式的值,编译器在计算a++时,先会创建一个临时变量tmp,然后把a的值3赋给临时变量tmp,然后a自增1,此时a= 4,但是a++整个表达式的值是临时变量的值3。所以()作用后的结果就是3.
++运算符号优先级高于赋值=运算符。所以加括号和不加没有区别。
记住每个运算符运算后都会有一个结果。
i++ < 100 和(i++) < 100也没有区别,
因为 <的优先级比++低。
所以在比较前,两者都是先做自增(i++)运算。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马