自增变量

自增变量

先看一段代码:

1
2
3
4
5
6
7
8
9
10
11
public class Demo1 {
public static void main(String[] args) {
int i = 1; // i = 1
i = i++; // i = 1
int j = i++; // j = 1
int k = i + ++i * i++; // k = 11
System.out.println("i = " + i);
System.out.println("j = " + j);
System.out.println("k = " + k);
}
}

结果:

i = 4
j = 1
k = 11

分析:

之前在算法中学到,运算操作都是通过栈来完成的,最典型的比如双栈表达式取值,一个操作符栈、一个操作数栈。运行一串表达式,遇到数值入操作数栈,遇到符号入操作符栈,执行操作时依次弹出。

首先明确一点:自增操作是不入栈的,直接修改变量的值。

执行流程:

  • int i = 1; 首先 常量 1 入栈,遇到 = 号,弹出 1 赋值给变量 i,此时 i = 1

  • i = i++; i = 1 入栈,i 变量自增:i = 2,但是此时操作数栈中的 i 依然是 1,再将操作数栈中的 1 赋值给变量 i,这一操作就原本的 i = 2 覆盖掉了变成了 1。此时 i = 1

  • j = i++; i = 1 入栈,i 变量自增为2,遇到 = 将 i = 1赋值给 j ,j = 1

  • k = i + ++i * i++;

    • i = 2 入栈
    • i 自增之后入栈,i = 3
    • i 入栈 ,i = 3,变量自增为 4,但是操作数中的 i 依旧为 3
    • 栈运算:2 + 3 * 3 = 11

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×