1

可能重复:
java operator ++ 问题

这是代码。我知道 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。

4

6 回答 6

15

你的预测是错误的。

count++ 将 count 增加 1 并返回旧值 (0)。这是你的情况。之后,您将旧值 (0) 分配给您的count变量。为了使其更易于理解,只需查看此代码

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

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

于 2012-05-19T13:30:19.313 回答
6

在 Java 中,此代码保证使变量具有相同的值。

就像是:

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

为了实现你想要的,写:

count++; //or
count += 1; //or
count = count +1;
于 2012-05-19T13:30:23.907 回答
2

替换count=count++;count++;

于 2012-05-19T13:30:33.900 回答
2
count = count ++;

这就是正在发生的事情。

首先,count++被评估,其评估为 0,但递增count。这0被分配给计数。所以 count 保持为 0。以下是不同的,因为 ++count 的计算结果为 1、2...

count = ++count;
于 2012-05-19T13:31:34.757 回答
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 会为你做这件事。我添加了一些您的代码中缺少的括号。我希望这有帮助。

于 2012-05-19T13:38:54.380 回答
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 加载到堆栈上(这是为变量count赋值0
  2. istore_1将堆栈值(0现在)存储到变量 1
  3. iload_1将变量 1(0现在)的 int 值加载到堆栈中
  4. zinc 1, 11按变量 1递增(count = 1现在)
  5. istore_1将堆栈值(0现在从步骤 #3 开始)存储到变量 1
  6. 返回

现在应该很清楚如何count = count++在 Java 中编译了。

于 2012-05-19T13:40:53.870 回答