2012-05-19 58 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的。