国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JAVA中:關于++和--

2019-11-18 14:15:20
字體:
來源:轉載
供稿:網友

  對于++和--這兩個運算符,c/c++語言和java語言有著截然不同的結果。大家可以測試一下。看看下面的程序:

……
public static void main(java.lang.String[] args) {

int k=0;
k=k++;
System.out.return 0;
}


0x8048440 : push %ebp
0x8048441 : mov %esp,%ebp
0x8048443 : sub $0x18,%esp
0x8048446 : movl $0x0,0xfffffffc(%ebp)
0x804844d : mov 0xfffffffc(%ebp),%eax
0x8048450 : mov %eax,0xfffffffc(%ebp)
0x8048453 : incl 0xfffffffc(%ebp)
0x8048456 : add $0xfffffff8,%esp
0x8048459 : mov 0xfffffffc(%ebp),%eax
0x804845c : push %eax
0x804845d : push $0x80484d4
0x8048462 : call 0x8048344
0x8048467 : add $0x10,%esp
0x804846a : xor %eax,%eax
0x804846c : jmp 0x8048470
0x804846e : mov %esi,%esi
0x8048470 : leave
0x8048471 : ret


最重要的是 main + 6 到 main + 19 部分. 也是我們所關心的部分.

: movl $0x0,0xfffffffc(%ebp) 給 i 賦值為 0
: mov 0xfffffffc(%ebp),%eax 把 i 的值賦給 eax 寄存器
: mov %eax,0xfffffffc(%ebp) 把 eax 寄存器的值賦給 i (計算完畢, 沒有其他計算)
: incl 0xfffffffc(%ebp) 將 i 加 1.

從中可以看出, i 最后的值是 1;


到現在為止, 我們粗略看了一下 Java 和 C 中對于 ++ 運算的不同. 但是還并不明顯.


我們再看一個例子:

public class Test
{
public static void main(String[] args)
{
int i = 1, j = 2;
i = (j ++) + (i ++);
System.err.println(i);
System.exit(0);
}
}

0 iconst_1
1 istore_1
2 iconst_2
3 istore_2
4 iload_2
5 iinc 2 1
8 iload_1
9 iinc 1 1
12 iadd
13 istore_1


#include

int main()
{
int i = 1, j = 2;
i = (j++) + (i++);
printf("%d", i );
return 0;
}

0x8048446 : movl $0x1,0xfffffffc(%ebp)
0x804844d : movl $0x2,0xfffffff8(%ebp)
0x8048454 : mov 0xfffffff8(%ebp),%eax
0x8048457 : mov 0xfffffffc(%ebp),%edx
0x804845a : lea (%edx,%eax,1),%ecx
0x804845d : mov %ecx,0xfffffffc(%ebp)
0x8048460 : incl 0xfffffffc(%ebp)
0x8048463 : incl 0xfffffff8(%ebp)

從上面的例子我們可以看出, 在 Java 和 C 中, ++ 運算的語義是有所不同的, Java 中
++ 運算是在賦值運算之前完成的, 而 C 中是在賦值預算之后完成的.

測試環境:

Debian 2.2r3
blackdown jdk 1.3.1
gcc 2.95.4
gdb GNU gdb 5.0.90-cvs (MI_OUT)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淳安县| 霍山县| 波密县| 开江县| 肃宁县| 同德县| 高密市| 青海省| 讷河市| 龙海市| 白玉县| 买车| 长汀县| 林周县| 十堰市| 九江市| 海安县| 开鲁县| 达日县| 海林市| 哈密市| 紫阳县| 将乐县| 古浪县| 延寿县| 宜章县| 景谷| 山阳县| 城固县| 遵化市| 久治县| 江津市| 资兴市| 万载县| 卢氏县| 闻喜县| 大理市| 前郭尔| 闽清县| 定远县| 沙坪坝区|