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 では機能しないのはなぜですか?
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 では機能しないのはなぜですか?
良い質問。
と の間には違いが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++) は元の値に評価されることです。単純なインクリメント/デクリメントを実行するだけであれば、どのバージョンを選択しても問題ありません。ただし、この演算子をより大きな式の一部で使用すると、選択した演算子によって大きな違いが生じる可能性があります。