此Java程序的输出

时间:2014-03-29 00:50:50

标签: java output

这不是我的代码,我知道这不是写这个的正确方法。我在网上测试时被问到这个问题。

public class HelloWorld{

     public static void main(String []args){
        int x = 10;
        x = x++ * ++x;
        System.out.println(x);
     }
}

Ouptut是120.我不明白为什么。它不应该是132/121吗?是JVM依赖吗?

3 个答案:

答案 0 :(得分:4)

首先评估

x++。它是后增量,因此10是表达式的值,然后x会增加到11

接下来评估

++x。它是预增量,因此x增加到1212是表达式的值。

其余的是简单的乘法,10 * 12 = 120。

此行为不依赖于使用哪个JVM;所有JVM必须按照Java语言规范的规定运行。

JLS, Section 15.14.2涵盖增量后表达式:

  

后缀增量表达式的值是存储新值之前的变量的值。

JLS, Section 15.15.1涵盖预增量表达式:

  

前缀增量表达式的值是存储新值后变量的值。

答案 1 :(得分:0)

这是处理i++++i含义的常见错误。

请参阅What is the difference between ++i and i++?

答案 2 :(得分:0)

这是完美的,x ++将在执行时由于post increment而使其成为10,并且将在之后变为11,并且++ x将使其在实例中由于preincrement而变为12。所以输出将是120