1

重複の可能性:
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 です。

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 に割り当てられます。したがって、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++ の値を 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_0count定数 0 をスタックにロードします (これは変数に値を代入するためです)0
  2. istore_1スタック値 (0現在) を変数 1 に格納します
  3. iload_1int 値を変数 1 (0現在) からスタックにロードします
  4. zinc 1, 11変数 1ずつインクリメントします (count = 1現在)
  5. istore_1スタック値 (0ステップ #3 の現在) を変数 1 に格納します
  6. 戻る

count = count++これで、Java でコンパイルする方法がかなり明確になったはずです。

于 2012-05-19T13:40:53.870 に答える