0
我的疑問是爲什麼在下面的代碼中輸出分別是2和1? 這真的好嗎? 對於我的看法,方法'm'應該接收值1,因爲它在變量'i'上使用後綴運算符而不是前綴運算符。在帶方法調用的表達式中的Java postfix運算符優先級
public class PostfixDoubt {
public static void main(String[] args) {
int i = 1;
// why does m receive 2 as argument and not 1?
i = i++ + m(i);
System.out.println(i);
}
public static int m(int i) {
System.out.println(i);
return 0;
}
}
婁與javap的反編譯字節碼:
public class PostfixDoubt {
public PostfixDoubt();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iload_1
3: iinc 1, 1
6: iload_1
7: invokestatic #16 // Method m:(I)I
10: iadd
11: istore_1
12: getstatic #20 // Field java/lang/System.out:Ljava/io/PrintStream;
15: iload_1
16: invokevirtual #26 // Method java/io/PrintStream.println:(I)V
19: return
public static int m(int);
Code:
0: getstatic #20 // Field java/lang/System.out:Ljava/io/PrintStream;
3: iload_0
4: invokevirtual #26 // Method java/io/PrintStream.println:(I)V
7: iconst_0
8: ireturn
}
是啊,我明白了,但爲什麼當m(i)返回的是他的結果添加到1?如果我已經重新評估,應該是2.我錯過了什麼? – staroski
@staroski看我的編輯。 'i ++'的值會生成一次。 –
它看起來像我重新評估兩次。首先將它傳遞給m(i),然後再將它重新分配給i = –
staroski