前置自增运算与后置自增运算合的运算结果很奇怪

来源:1-1 运算符概述

Zach_Lin

2021-11-27 12:20:44

问题描述:

如题我将前置与后置运算结果相加并赋值给变数num,但结果与我预期的不同,应当是4 + 5 = 9,先前编写c代码时也有过这个问题(编译器的Undefined Behaviour问题)

我的问题是(++a)+(a++)的返回值该怎么判断? 或者存在跟c/c++一样的编译器问题,造成结果无法确定

相关代码:

public class Main
{
    public static void main(String[] args) {
        int a = 4;
        
        a = (++a) + (a++); // a=10 Undefined Behaviour?
        System.out.println("a = "+a);
        
        a = (a++) + 4;
        System.out.println("a = "+a);
        
        a += (++a);
        System.out.println("a = "+a);
        
        a -= (a--);
        System.out.println("a = "+a);
    }
}


尝试过的解决方式:

我去查看java文档确定运算顺序始终是左至右,并没有像c/c++有例外状况。

相关截图:

https://img.mukewang.com/climg/61a1b18309a0807908810761.jpg


现在的想法是

写回答

1回答

好帮手慕小明

2021-11-27

同学您好,

同学所描述的意思是这段代码a = (++a) + (a++);结果应该为9,而不是10对吗?

a = (++a) + (a++);将这段代码分解计算:

  1. ++a是先进行自增,计算得出,值为5

  2. a++是先计算后自增,这段代码应该是5+4等于9再进行自增,也就是10

在java中并不会出现同学所描述的情况。

祝同学学习愉快~

1

0 学习 · 9886 问题

查看课程