2011-11-04 120 views
3
class T { 
    public static void main(String args[]) { 
     int x = 0; 
     x = x++; 
     System.out.println(x); 
    } 
} 
+0

看看这有助于解释http://stackoverflow.com/questions/1094872/is-there-a-difference-between-x-and- x-in-java – Sean

+0

下面的答案给出了原因。如果您想知道的不仅仅是理由,而且实际上也需要解决方案,请使用前缀运算符:'++ x'。 –

+0

可能重复的[为什么会进入无限循环?](http://stackoverflow.com/questions/3831341/why-does-this-go-into-an-infinite-loop) – nawfal

回答

8

因为++是“后增量”运算符 - 它在之前返回变量的值,它会增加。

的步骤是:

  • i值(增加前),并记住它
  • 增量i
  • 分配的记忆值i
+0

感谢RichieHindle!很好的解释 ! – user989093

+1

@ user989093务必在最适合您的问题的答案上使用绿色复选标记。 –

4

因为POST增量运算符返回一个时间值(x的当前值),然后递增x。

试试这样说:

class T { 
    public static void main(String args[]) { 
     int x = 0; 
     x = ++x; 
     System.out.println(x); 
    } 
} 
+3

或者只是'x ++',没有'x ='部分。 :) – Dougal

2

由于您使用后缀++运营商,这意味着它在转让之后进行评估。因此首先对x = x进行评估,因此x保持为0,然后对x++进行评估,但结果未分配给任何内容。

你可以使用前缀++操作来实现你想要的结果:x = ++x;

docs

递增/递减运营商可以之前(前缀)或之后 应用(后缀)操作数。代码结果++;和++结果;将 两端的结果加1。唯一的区别是 前缀版本(++结果)评估为递增值, 而后缀版本(结果++)评估为原始 值。

1

x++返回零,然后增加x。这是0.

3
x = x++; 

x = x++设置x(它已递增之后)的x++返回值的分配,相当于

temp = x; 

x = x + 1; 

x = temp; 

这就是为什么输出为零。

该算子被称为后增加算子。 与增量后操作符相关的其他操作符是,每增量操作符。

x = ++x; 

如果你申请每递增输出为1

0

因为++后添加的程序运行后。您可以通过以下两种方式

class T { 
    public static void main(String args[]) { 
     int x = 0; 
     x = ++x; 
     System.out.println(x); 
    } 
} 

class T { 
    public static void main(String args[]) { 
     int x = 0; 
     x += 1; 
     System.out.println(x); 
    } 
} 
0

修复它这是因为x++实际上意味着,“使用存储在x的值,然后加一”。如果您想在使用前增加该值,请改为++x

0

我不知道现在,它会使输出的差异,但你并不需要进口,你可以改变:

x = x++; 

到:

x++; 
0

显示例子如前面的回答者所说:

class T { 
    public static void main(String args[]) { 
     for (int i = 0; i < 6; i++) { 
      int x = 0; 
      x = x+1+i; 
      System.out.println(x); 
     } 
    } 
} 
0

this海的第一个结果rch是this的链接。

所观察到的,它的行为的原因是因为操作者的优先级和所述++ 操作者的奇数“返回值”之间的相互作用 的。后缀增量首先发生(请参阅运算符优先级图表的最常见副本 );但根据定义,后缀返回变量的前一个值 。因此,“返回值”不是 “原始x加1”,而是“原始x”(x,在此 点处,实际上包含递增的值)。这个返回值 然后被分配给x,它将覆盖++在第一个 位置中做的事情。 IOW,在表达式x = x ++中,增加的值丢失, 被最后发生的分配覆盖。

Google是你的朋友! :)

0

解释你在做什么:

class T { 
    public static void main(String args[]) { 
     int x = 0; // x is zero 
     x = x++; // assign x to be x (which is 0). 
       // then increment a non-existant variable by 1 
     System.out.println(x); //print 0 
    } 
}