2011-11-04 117 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 
    } 
}