如何评估此switch语句?

时间:2014-08-02 03:39:49

标签: java switch-statement

编译器如何解释此switch语句?我假设switch语句中的内容是(41),为什么它会转到case 2?

    int i = 4;
    int j = 2;

    switch(i++-j) {         //switch is evaluted to be (41)??
    case 3: i++; break;
    case 1: j++; break;
    case 2: j+=2; break;
    case 5: i+=2; break;
    default: i +=5; break;
    }

    System.out.println(i);  //Prints out 4
    System.out.println(j);  //Prints out 5

3 个答案:

答案 0 :(得分:6)

分解:

i++-j

++的优先级高于-,因此:

(i++)-j

++是后缀增量 - 它会在增量之前计算为i的值。 i的初始值为4,因此:

4-j

j2,因此表达式的计算结果为4-2 = 2

i已增加,因此现在具有值5; j由switch语句中的代码修改。

答案 1 :(得分:1)

通过初始化

i=4;
j=2; 

switch(i++-j) {  // Expression evaluates as 4-2 = 2.
    // new value for i=5 since i++ executed
    case 3: i++; break; // skipped
    case 1: j++; break; // skipped
    case 2: j+=2; break; // Executed, hence  evaluates as 2+2 = 4.
    case 5: i+=2; break; // Skipped
    default: i +=5; break; // Skipped
    }

    System.out.println(i);  // Prints out 5
    System.out.println(j);  // Prints out 4

答案 2 :(得分:0)

在切换条件下,表达式的值将为4 - 2 = 2。

然后,在使用该值后,i变为5.

然后,案例2:将被执行,j = 2,j + = 2将是4。

因此,输出将是:

5

4