-9

My code:

public void mysterious() {
    int x = 1;
    x = x++ / ++x;
    System.out.println(x);
}

whats the answer?

4

3 回答 3

4
int x = 1;
x = x++ / ++x;
System.out.println(x);

从左到右进行评估:-

  • 首先对 x++ 进行评估。所以,它将是1
  • 然后 x 将增加 1.. 对于 Post Increment..
  • 然后++x被评估..这将是3(因为x在之后增加x++

所以,基本上,你上面的代码相当于: -

int x = 1;
int a = x++;   // a = 1, x = 2
int b = ++x;   // b = 3, x = 3
x = a / b;     // x = 1 / 3
System.out.println(x); // Prints 0
于 2012-10-08T10:40:20.897 回答
0
public void mysterious() {
    int x = 1;
    x = x++ / ++x;
    System.out.println(x);
}

x = 1; // 将整数值 1 赋给变量 x

x = x++ / ++x;

让我们把上面的语句分成 2 个 diff 语句。

x++- PostIncrement,x的值加1,所以现在它的值是2,那么

x++- PreIncrement,x 的值再次递增并分配给左侧的 x,所以现在是 3。

System.out.println(x);

所以它将是1/3,这将导致0,如果您使用double而不是 int,您将看到该值为0.33333333

于 2012-10-08T11:00:45.613 回答
0

此表达式的评估是从左到右执行的。这个表达式等价于增量评估后的这个:

x = 1/3;

因此,答案是 0;

于 2012-10-08T10:33:14.910 回答