このコードの出力は次のとおりです。ポストインクリメント演算子変数
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);
}
}
このコードの出力は次のとおりです。ポストインクリメント演算子変数
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);
}
}
c++
のような式は次のように動作するので:
c
を評価。この(例えばtmp = c
;)覚えてc
(tmp
)だからこのケースでは、あなたはとてもid
が0になると、c = 0
から始め..しかし、c
がプロセスでインクリメントされるため、式が評価された後にはc
が1になります。
詳細については、Java言語仕様のsection 15.14.2を参照してください。展開時:
オペランド式の評価が突然完了すると、同じ理由で後置インクリメント式が突然完了し、インクリメントが発生しません。それ以外の場合は、値1が変数の値に加算され、合計が変数に戻されます。加算の前に、値1と変数の値に対してバイナリ数値昇格(5.6.2)が実行されます。必要であれば、その総和は、縮小プリミティブ変換(5.1.3)によって縮小され、かつ/またはボクシング変換(5.1.7)の後に変数の型に格納される。後置インクリメント式の値は、新しい値が格納される前の変数の値です。
id = c++
が割り当てられますc
~id
,、次にの値c
をインクリメントします。次のようになっています:
c = 0;
id = c; // assigns zero
c = c + 1;
代わりにid = ++c
を試してください。
C++を使用しているためです。
C++は、まず変数をIDに保存してから++をインクリメントすることを意味します。
++ cを使用する場合は、まずインクリメントしてidに保存します。
しかし、C++はc = c + 1を意味するため、c:1 id:1を返します!
あなたが言う場合:0とID:1
'C++' 'C '(ポストインクリメント)をインクリメントだろう、とあなたはポストインクリメントを言っているので、' id'はなるだろう、ID = C + 1、あなたがCを取得します増分する前の 'c'の値。 – birryree