读书人

从增 自减 java和c的区别

发布时间: 2012-09-22 21:54:54 作者: rapoo

自增 自减 java和c的区别

?

JAVA

?

public class Test {        public static void main(String[] args) {          int i = 1000;          int j = 2000;          int a = i++;          int b = ++j;      }  }  汇编 0: bipush        1000     //   2: istore_1              //设置 i=1000   index=1的本地变量   3: sipush        2000      6: istore_2              //设置j=2000;  index=2的本地变量  7: iload_1               //把index=1的数据放入操作栈   8: iinc          1, 1    //把index=1的数据加1  11: istore_3              //把操作栈中数据赋值给a 12: iinc          2, 1    //把index=2的数据加1  15: iload_2               //把index=2的数据放入操作栈  16: istore        4       //把操作栈中数据赋值给b 

?

区别:

a=i++ 表示先把i放入操作栈,后更新i在本地变量的值,最后把操作栈的值(没变动过)赋值给a ?

b=++i ?表示先更新本地变量j,后放到操作栈中,再把操作栈中数据赋值给b

?

?

?

C

?

int main(void) {    int i = 1000;    int j = 100;    int a = i++;    int b = ++j;} leal    4(%esp), %ecx andl    $-16, %esp pushl   -4(%ecx) pushl   %ebp movl    %esp, %ebp pushl   %ecx subl    $16, %esp movl    $1000, -20(%ebp)    //栈ebp-20位置的值为1000  表示i movl    $100, -16(%ebp)     //栈ebp-16位置的值为2000  表示j movl    -20(%ebp), %eax     //把栈ebp-20位置的值1000 放入eax movl    %eax, -12(%ebp)     //把eax的值放入ebp-12  表示a addl    $1, -20(%ebp)       //把栈ebp-20的值+1 addl    $1, -16(%ebp)       //把栈ebp-16的值+1 movl    -16(%ebp), %eax     //把栈ebp-16的值放入eax movl    %eax, -8(%ebp)      //把eax的值放入栈ebp-8 表示b addl    $16, %esp popl    %ecx popl    %ebp leal    -4(%ecx), %esp

?区别:

a=i++ 表示先把i的值赋给a,然后给i加1

a=++i 表示先把i的值加1,然后赋值给a

?

读书人网 >编程

热点推荐