++i与i++区别及经典面试题

500 阅读1分钟

++i 先+1后使用,i++先使用后+1

下面看三道经典面试题

  • 第一题

    int a = 0; for (int i = 0; i < 99; i++) { a = a++; } System.out.println(a);

  • 第二题

    int b = 0; for (int i = 0; i < 99; i++) { b = ++b; } System.out.println(b);

  • 第三题

    int a = 0; int b = 0; for (int i = 0; i < 99; i++) { a = a++;
    b = a++; } System.out.println(a); System.out.println(b);

_第一题为i++模式,_结果__为 a = 0

第二题为++ i模式,结果为 b = 99

第三题是最容易做错的一道题,b = a++ 等效于 a++;b=a,最终结果为 a = 99,b=98

为了解i = i++ 执行过程,我们简单了解一下栈的规则,我们知道栈是先进后出

下面我们看反编译后的代码

Code:   0:   iconst_0     //0放到栈顶   
1:   istore_1    //把栈顶的值保存到局部变量1,也就是i中   
2:   iload_1     //把i的值放到栈顶,也就是说此时栈顶的值是0   
3:   iinc    1, 1  //注意这个指令,把局部变量1,也就是i,增加1,这个指令不会导致栈的变化,也就是说局部变量1,即i此时为1了。   
6:   istore_1     //把栈顶的值(0)保存到局部变量1,也就是让i为0了,所以最后i为0  
7:   getstatic   #2; //Field java/lang/System.out:Ljava/io/PrintStream;   
10:  iload_1   
11:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V   
14:  return