私は次のコードを持っています:
public class Tests {
public static void main(String[] args) throws Exception {
int x = 0;
while(x<3) {
x = x++;
System.out.println(x);
}
}
}
私たちは、彼がちょうど書かれている必要があります知っているx++
かx=x+1
、しかしにx = x++
それべき最初の属性x
自体に、後でそれをインクリメントします。なぜ価値x
として続けるの0
ですか?
- 更新
バイトコードは次のとおりです。
public class Tests extends java.lang.Object{
public Tests();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]) throws java.lang.Exception;
Code:
0: iconst_0
1: istore_1
2: iload_1
3: iconst_3
4: if_icmpge 22
7: iload_1
8: iinc 1, 1
11: istore_1
12: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
15: iload_1
16: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
19: goto 2
22: return
}
理解しようとするための指示について読みます...
x++
はポストインクリメントです。結果のx=
割り当てです。結果のは、元である(そして増加の副作用があり、それは結果を変更しない)、これはのように解釈できるように、x++
x
var tmp = x; x++; x = tmp;