1

このコードの出力は次のとおりです。

c: 1 , id: 0

出力がそうでない理由を知りたい:

c: 0 , id: 1

class A {
    private static long c;
    private final long id = c++;
    public A() {
       print("c: " + c + " , id: " + id);
    }
} 
4

3 に答える 3

4

式 like は次のようにc++動作するためです。

  • 評価するc; これを覚えておいてください(例tmp = c;)
  • インクリメントc
  • 式の結果は元の値 ( tmp)

したがって、この場合、 から開始するc = 0ため、idは 0 になります... しかしc、プロセスでインクリメントされるためc、式が評価された後は 1 になります。

詳細については、Java 言語仕様のセクション 15.14.2を参照してください。エキス:

実行時に、オペランド式の評価が突然完了すると、同じ理由で後置インクリメント式が突然完了し、インクリメントは発生しません。それ以外の場合は、値 1 が変数の値に追加され、合計が変数に格納されます。加算の前に、値 1 と変数の値に対してバイナリ数値昇格 (§5.6.2) が実行されます。必要に応じて、合計は縮小プリミティブ変換 (§5.1.3) によって縮小されるか、格納される前に変数の型へのボックス化変換 (§5.1.7) を受けます。後置インクリメント式の値は、新しい値が格納される前の変数の値です。

于 2012-05-08T21:33:49.647 に答える
1

id = c++の値をcに代入し、idインクリメントします。これは、次のことを行ったかのようです。c

c = 0;
id = c; // assigns zero
c = c + 1;

id = ++c代わりに試してください。

于 2012-05-08T21:33:32.203 に答える
1

あなたはC++を使っているからです。

c++ は、最初に変数を ID に保存してから ++ をインクリメントすることを意味します。

++c を使用する場合は、最初にインクリメントしてから id に保存します。

ただし、c++ は c = c+1 を意味するため、c:1 id:1 が返されます。

id = c+1 と言うと、c:0 と id:1 が得られます。

于 2012-05-08T21:33:59.350 に答える