如何在复杂表达式中计算java增量语句

以下代码的输出是什么:

int x = 2; x += x++ * x++ * x++; System.out.println(x); 

我理解++variableName是预增量运算符,并且variableName的值在表达式中使用之前递增,而variableName++在表达式执行后递增其值。 我想知道的是 – 这个逻辑在这里是如何应用的?

使用x = 1而不是2更容易看到正在发生的事情.x = 1的输出是7。

理解这一点的关键在于JLS 15.7.2 ,它规定在执行任何操作部分之前,每个操作数都要完全评估。

Java编程语言保证在执行操作本身的任何部分之前,操作符的每个操作数(条件运算符&&,||和?:)除外似乎都要完全评估。

因此,评估x ++(每次3次,从左到右,具有适当的优先级,这不是问题),然后评估操作*并将其分配给原始值。

 x = 1 + (1 * 2 * 3) 

如果x以2开头,则得到:

 x = 2 + (2 * 3 * 4) 

与C不同,它在Java中定义良好,并且在任何运行时的每次调用中都表现相同。

如果有人想为自己运行它,则需要关联: https ://ideone.com/Y2qcJ6