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

时间:2014-04-25 20:23:44

标签: java post-increment operator-precedence

以下代码的输出是什么:

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

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

1 个答案:

答案 0 :(得分:8)

更容易看到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