以下代码的输出是什么:
int x = 2;
x += x++ * x++ * x++;
System.out.println(x);
我理解++variableName
是预增量运算符,variableName
的值在表达式中使用之前递增,而variableName++
在表达式执行后递增其值。我想知道的是 - 这个逻辑在这里如何应用?
答案 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