次のコードを実行した結果は何ですか?
パッケージcom.test; public class inc {public static void main(string [] args){inc inc = new inc(); int i = 0; Inc.Fermin(i); i = i ++; System.out.println(i); } void fermin(int i){i ++; }}結果は次のとおりです
上記の同様のコードをC/C ++で実行した結果は次のとおりです。1。なぜこれがなぜですか?
これは、Javaが中間キャッシュ変数メカニズムを使用しているためです。
i = i ++;相当:
temp = i; (私は等号の右側にあります)
i = i+1; (私は等しい兆候の右側)
i = temp; (私は等号の左側にあります)
およびi = ++ i;に相当します:
i = i+1;
temp = i;
i = temp;
詳細な説明:
JVMには2つのストレージエリアがあり、1つは一時的な保管エリア(下のスタックと呼ばれるスタック)、もう1つは可変領域です。
JVMはこのようなこの声明を実行します:
ステップ1 JVM Iの値を一時変数領域(TEMP = 0)にコピーします。
ステップ2変数領域Iの値を1に追加し、Iの値は1です。
ステップ3一時変数領域(TEMP)の値を返します。この値は0であり、変更されていないことに注意してください。
ステップ4戻り値は変数領域のIに割り当てられ、Iの値は0にリセットされます。
C/C ++でIを救うための他の一時的な変数または一時的なスペースはありません。すべての操作は1つのメモリスペースで完了するため、C/C ++で1です。
Javaの自己排気問題の上記の紹介は、私があなたと共有したすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。