1

c で:

int a = 33;
a = a++;
printf("\n\t a :%d",a); // it'll print 34

Java の場合:

int a = 33;
a = a++;
System.out.printf("\n\t a :%d",a); // it'll print 33

C ではポスト インクリメントが正しく機能し、Java では機能しないのはなぜですか?

4

1 に答える 1

3

良い質問。

と の間には違いがa++あり++aます。Java (少なくとも) では、それぞれが変数をインクリメントしますが、式によって表される値は異なります。

int i = 0;
System.out.println(i++); // 0

int j = 0;
System.out.println(++j); // 1

したがってa、1 ずつインクリメントしていますが、元の値に戻します

Javaチュートリアルから:

インクリメント/デクリメント演算子は、オペランドの前 (プレフィックス) または後 (ポストフィックス) に適用できます。コード結果++; そして++結果; どちらも結果が 1 ずつインクリメントされて終了します。唯一の違いは、プレフィックス バージョン (++result) はインクリメントされた値に評価されるのに対し、ポストフィックス バージョン (result++) は元の値に評価されることです。単純なインクリメント/デクリメントを実行するだけであれば、どのバージョンを選択しても問題ありません。ただし、この演算子をより大きな式の一部で使用すると、選択した演算子によって大きな違いが生じる可能性があります。

于 2013-03-10T19:02:18.567 に答える