如何评估此switch语句?

use*_*148 3 java switch-statement

编译器如何解释此switch语句?我假设switch语句中的内容是(41),为什么它会转到案例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
Run Code Online (Sandbox Code Playgroud)

Tom*_*mmy 6

分解:

i++-j
Run Code Online (Sandbox Code Playgroud)

++优先级高于-:

(i++)-j
Run Code Online (Sandbox Code Playgroud)

++是后缀增量 - 它将计算i增量前的值.初始值为i4,因此:

4-j
Run Code Online (Sandbox Code Playgroud)

j2这样的表达式评估为4-2 = 2.

i已经递增,所以现在有了价值5; j由switch语句中的代码修改.