返回列表 发帖

向各位大侠求教

本人一初学java者,有一问题怎么也看不懂,请各位大侠指教!
public class Operator15 {
         public final static void main(String args[]){
                 int x=3;
                 int y=5;
                 int res=x+(x++)+(++x)+y;
                 System.out.println(res);
         }
}
程序执行结果是:16.可我觉得应是18才对。就是先计算++x值为3,然后自增为4,在计算++x应该先自增为5,再参与计算。然后计算x为5,y为5,这样结果就应该是18了,问题出在哪?
然后我把程序做了一个小修改:
public class Operator15 {
         public final static void main(String args[]){
                 int x=3;
                 int y=5;
                 int res=(x++)+(++x)+x+y;
                 System.out.println(res);
         }
}
执行结果就是18了,这两个程序有什么差别吗?
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

回复 2# fwbook


    谢谢您的指导。
按照您的解释,后面的程序(x++)+(++x)+x+y,也应该从左边开始,先处理(x++)+(++x),这时x=3,(x++)+(++x)=3+(++4)=8,这时候x=5了。然后处理后面的8+5=13,最后是13+y=18.
这是和程序运行结果是一样的。
我还有一个疑问,不是说()的作用是要先进行运算吗?也就是在两段程序中,应该优先进行括号内的运算,按照您的解释,还是从左至右进行依次运算,这样和括号的作用不是有冲突了吗?希望您能再指导一下,先谢谢啊!

TOP

还是有点不明白,您的意思是在赋值的时候,应该是从左到右依次赋值,计算的时候再考虑括号的作用,是这样的吗?

TOP

有些明白了,就是其实赋值的时候,是从左到右依次赋值的,并不是有括号的就先赋值,是这个意思吗

TOP

返回列表