这不是我的代码,我知道这不是写这个的正确方法。我在网上测试时被问到这个问题。
public class HelloWorld{
public static void main(String []args){
int x = 10;
x = x++ * ++x;
System.out.println(x);
}
}
Ouptut是120.我不明白为什么。它不应该是132/121吗?是JVM依赖吗?
答案 0 :(得分:4)
x++
。它是后增量,因此10
是表达式的值,然后x
会增加到11
。
++x
。它是预增量,因此x
增加到12
,12
是表达式的值。
其余的是简单的乘法,10 * 12 = 120。
此行为不依赖于使用哪个JVM;所有JVM必须按照Java语言规范的规定运行。
JLS, Section 15.14.2涵盖增量后表达式:
后缀增量表达式的值是存储新值之前的变量的值。
JLS, Section 15.15.1涵盖预增量表达式:
前缀增量表达式的值是存储新值后变量的值。
答案 1 :(得分:0)
这是处理i++
和++i
含义的常见错误。
答案 2 :(得分:0)
这是完美的,x ++将在执行时由于post increment
而使其成为10,并且将在之后变为11,并且++ x将使其在实例中由于preincrement
而变为12。所以输出将是120