这个神秘的代码做了什么?

时间:2012-10-08 10:26:53

标签: java

我的代码:

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

答案是什么?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

该表达式的评估从左到右进行。在增量评估之后,此表达式等效于此表达式:

x = 1/3;

因此,答案是0;

答案 2 :(得分:0)

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

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

x = x++ / ++x;

将上述语句分解为2个差异语句。

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

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

System.out.println(x);

因此1/3会导致0,如果您使用double而不是int,则会看到值为0.33333333