j = j++ および j = ++j に関する質問

今日は筆記試験の問題がありました。まず問題を見てみましょう。

public class Demo1011 {
    
    
	public static void main(String[] args) {
    
    
		int j = 0;
		for (int i = 0; i < 10; i++) {
    
    
			j = j++;
		}
		System.out.println(j);
	}
}

問題は、プログラムの実行後の入力結果は何でしょうか?
操作結果:
ここに画像の説明を挿入します
驚いた表情ですか?なぜですか?

いろいろ勉強してやっとわかったのでまとめてみます。

まず j = j++ を見てみましょう。j = 0 とします。JVM
が j++ を処理するとき、まず変数 j の値をスタックにプッシュし、一時的にスタックに格納してから、変数領域の j に 1 を加えます ( j = j + 1) とすると、このときの j の値は 1 になりますが、このときの演算結果はスタックの値を返します。つまり戻り値は 0 のままです。したがって、 j++ による演算の結果(戻り値) (演算前に j = 0 の場合) は 0 のままです。j = j++ はスタック内の値を変数 j に代入しますが、j の値は 0 のままになります。

j = ++j をもう一度見てみましょう。j = 0 と仮定します。JVM
が ++j を処理するとき、最初に変数 j を 1 つインクリメントし、次にその値をスタックに置き、最後にスタック内の値を変数.領域 j なので、j の値は 1 です。

勉強で問題に出会ったら、一つ一つ解決していき、解決してしまえば問題ではなくなります。(理解しているからといって、本当に理解しているわけではありません。人に説明できて初めて、本当に理解できるのです)

おすすめ

転載: blog.csdn.net/weixin_40307206/article/details/102512657
J_S