int result = 5;
result = result--;
System.out.println(result);
結果が5に等しいのはなぜですか?
式result--
の値はデクリメントresult
前の値であるためです。次にresult
デクリメントされ、最後に式の値が割り当てられresult
ます(デクリメントを上書きします)。
これは何もしません:
result = result--;
なぜならresult--
、デクリメントされる前の結果の値を返すからです(デクリメントされた後の結果の値を返すのとは対照--result
的です)。そして、の右側の部分がの=
前に実行されるので=
、基本的に結果をデクリメントし、次に同じ行で、結果をデクリメント前の値に設定して、実際にはキャンセルします。
だからあなたは書くことができます
result = --result;
ただし、結果をデクリメントする場合は、次のようにします。
result--;
(または--result;
、それを単独で使用することは非常に珍しく、非典型的です。式の結果を使用したくないが、単にデクリメントしたい場合は、使用しないでください)
非常に有効な質問です!
result--
置換後にのみ実行されるため、コードは機能しません=
。プレフィックス演算子を使用すると、コードは機能します。
result = --result;
ただし、次のように書くだけでは意味がありません。
--result;
より詳細な説明については、Javaでプレフィックス/ポストフィックス演算子がどのように機能するかについてのこの質問/回答を参照してください。
これは紛らわしい構成です。それはと同じです
int tmp = result;
result--;
result = tmp;
ポストデクリメント演算子を使用しています。これはあなたが書いているresult--
がそうではないからです--result
。式の値result--
はのコピーであり、デクリメントの前result
に定義されます。それがpost -decrementと呼ばれる理由です。
式の値result--
が定義された後、result
がデクリメントされます。ただし、この直後、の値は式( )の値(5)result
で上書きされます。result--
result = 5
result--はポストデクリメントです。これは、値が最初にresultに割り当てられ、次にデクリメントされることを意味します。
この回答が役立つ場合があります。
私はあなたがしたいことは次のとおりだと信じています:
int result = 5;
result--;
System.out.println(result);
プレフィックス増分に変更して目的の結果を取得するか、割り当てステートメントを削除します。
int result = 5;
result = --result;
System.out.println(result);
試す
結果=-結果; 4と表示され、c--と--cの違いが何であるかがわかります。