2012-05-19 92 views
1

可能重複:
java operator ++ problem++運算符在Java

這是代碼。我知道C++和++ c之間的區別。

public class sample { 
    public static void main(String[] b){ 
    int count = 0,a=0; 
    for (int i = 0; i < 3; i++){ 
     count=count++; 
     System.out.println(count); 
    } 

但是我期待是

count=count;count=count+1;//output has to be 1 2 3 

但輸出是0 0 0

+3

+1哎喲,這是你有的討厭的東西。 –

+1

我想了解不實施的概念... – freshDroid

回答

15

你的預測是錯誤的。

count ++將遞增計數1並返回舊值(0)。你的情況是哪一個。之後,您將舊值(0)分配給您的count變量。爲了使其更容易理解,只要看看這段代碼

count = count; // is the same as count = count++; 

不要使用count = count++;,只需使用count++

6

在Java中,這個代碼是保證保持變量具有相同的值。

這就像:

int temp; 
temp = count; 
count = count +1; 
count = temp; 

到acheieve你想要什麼,寫:

count++; //or 
count += 1; //or 
count = count +1; 
+0

@freshdroid這是你所尋求的。 –

+0

因此,在c = a ++和c = ++中都會首先進行增量。但不同之處在於,c會在第一種情況下被賦予舊值,在第二種情況下被賦予更新值。我是對嗎? – freshDroid

+0

這是正確的。 – MByD

2

更換count=count++;count++;

2
count = count ++; 

這是發生了什麼事。

首先,count++被評估,評估爲0,但增量爲count。這0分配給計數。所以計數保持爲0以下是不同的,因爲++數的計算結果爲1,2 ...

count = ++count; 
0

我稍加修改你的代碼,我已工作

public class sample { 
    public static void main(String[] b){ 
     int count = 0,a=0; 
     for (int i = 0; i < 3; i++){ 
      count++; 
      System.out.println(count); 
     } 
    } 
} 

你不不必重新分配count ++的值來計數。 Java會爲你做。我在代碼中添加了一些缺少的括號。我希望這有幫助。

0

我認爲這會給你一個很好的解釋。

考慮這個類:

public class T 
{ 
    public void f() { 
    int count = 0; 
    count = count++; 
    } 
} 

這是相關聯的字節碼:

public void f(); 
    Code: 
    0: iconst_0 
    1: istore_1 
    2: iload_1 
    3: iinc 1, 1 
    6: istore_1 
    7: return 
} 
  1. iconst_0負荷常數0壓入堆棧(這是用於與值0分配可變count
  2. istore_1商店堆棧值(0現在)爲可變1個
  3. iload_1載荷通過1變量1(count = 1現在)詮釋從變量1 0值(現在)到堆棧
  4. zinc 1, 1增量
  5. istore_1存儲現在堆棧值(0步驟#3)爲變量1
  6. 回報

現在應該很清楚count = count++如何被編譯Java的。