关于自增运算符的优先级问题

关于自增运算符的优先级问题

请看如下代码:

public class Test {
    public static void main(String[] args) {
        int x= 1;
        int y =(x++) + (++x) + x;
        System.out.println("y="+y);
    }
}

输出结果为:y = 7

再看下面这段略微修改的代码:

public class Test {
    public static void main(String[] args) {
        int x= 1;
        int y =x + (x++) + (++x);
        System.out.println("y="+y);
    }
}

输出的结果却是:y = 5

老师能详细讲解一下这段程序的计算过程吗?
为什么我把x的位置改变了会导致y的值改变呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-10-18 18:26:34

同学你好,以下两个表达式的执行顺序如下:

一、(x++) + (++x) + x;

    1.初始x为1;

    2.执行x++,此时将1放入表达式,此时表达式为1 + (++x) + x,之后将x自增1,变为2;

    3.执行++x,此时先将x自增1,x变为3,然后将3放入表达式,此时表达式为1 + 3 + x;

    4.将3放入表达式,此时表达式为1 + 3 + 3,结果为7。

二、x + (x++) + (++x);

    1.初始x为1;

    2.将x放入表达式,此时表达式为1 + (x++) + (++x);

    3.执行x++,此时将1放入表达式,此时表达式为1 + 1 + (++x);,之后将x自增1,变为2;

    4.执行++x,此时先将x自增1,x变为3,然后将3放入表达式,此时表达式为1 + 1 + 3,结果为5。

祝学习愉快~

  • 提问者 慕UI6041492 #1

    ( )的运算符优先级最高,为什么不先执行( )内的自增运算符,而是从左往右执行呢?

    2022-10-18 22:58:55
  • 好帮手慕小蓝 回复 提问者 慕UI6041492 #2

    同学你好,Java代码的解析是先自上而下,再自左向右的顺序。当上述表达式进行解析时,也会遵从这个原则。所以并不会先将所有括号中的自增都计算完成之后,再去将所有使用x的位置进行赋值。

    祝学习愉快~

    2022-10-19 09:40:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师