Java入門・初心者質問スレ [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0726717
2016/10/04(火) 20:59:41.12ID:rJSgKoMJint i = 2;
System.out.println(++i);
の場合
0 : iconst_2 //int型の2をオペランドスタックにpush
1 : istore_1 //ローカル変数領域の1番目に2を格納(0番目は違うデータ)
2 : getstatic #16 //System.out.PrintStream
5 : iinc 1, 1 //1番目のローカル変数(ここではi(=2))を1インクリメントする
8 : iload_1 //ローカル変数 i をオペランドスタックへpushする
9 : invokevirtual #22 //println実行
int i = 2;
System.out.println(i++);
の場合
0 : iconst_2
1 : istore_1
2 : getstatic #16
5 : iload_1 //ローカル変数 i をオペランドスタックへpushする
6 : iinc 1, 1 //1番目のローカル変数(ここではi(=2))を1インクリメントする
9 : invokevirtual #22
これだと、
++i の場合、ローカル変数領域でインクリメントした値をオペランドスタックにプッシュしてprintlnしている。
i++ の場合、iをオペランドスタックにプッシュした後、ローカル変数領域でインクリメントしている。
つまり、printlnで出力される値はオペランドスタック内での値で、インクリメントされるのはローカル変数領域の値。
ローカル変数領域の値をインクリメント前後のどっちのタイミングで取り出すかで結果が違った。
これでいいんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています