2012-10-08 41 views
-8

我的代码:这个神秘的代码是做什么的?

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

什么答案?

+4

我总是'0'想象中那么我不不知道你为什么得到'2'。 –

+1

我正要说0,你得到1/3这是0.33,当投给int(在这种情况下)是0. –

+2

'1/3'在整数除法中是0,不需要施法。 ;) –

回答

0

该表达式的评估从左到右进行。这个表达式是等效于这样一个增加量评价后:

x = 1/3; 

因此,答案是0;

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

评估工作完成左到右: -

  • 第一个X ++进行评估。所以,这将是1
  • 然后x将通过1递增。对于后增量..
  • 然后++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 
0
public void mysterious() { 
    int x = 1; 
    x = x++/++x; 
    System.out.println(x); 
} 

x = 1; //分配整数值1至变量x

x = x++/++x; 

让打破了上述说法分成2个不同的语句。

x++ - 后置中,x的值加1,因此它的值是2现在,然后

x++ - 预增量中,x的值被再次递增,并且赋值给x的左手侧,所以它的3现在。

System.out.println(x); 

因此,这将是1/3,这将导致0,如果使用double的不是int,你会看到该值0.33333333