i++和i++相关面试题
计算原则:
- 赋值运算符=,最后计算;
- =右边的从左到右加载值依次压入操作数栈;
- 实际先算哪个,看运算符优先级;
- 赋值操作是将操作数栈中的值赋给局部变量表,比如i=i++,假设i的初始值为10,局部变量表中的值变化顺序为10->11->10;
- 自增、自减操作都是直接在局部变量表中修改变量的值,不经过操作数栈;
- i++是先将局部变量表中的值压入操作数栈,局部变量表中的值+1;
- ++i是局部变量表中的值+1,再压入操作数栈;
- 最后的赋值之前,临时结果也是存储在操作数栈中。
示例代码:
public class IncrementTest {
@Test
public void test() {
int i = 1;
i = i++;
int j = i++;
int k = i + ++i * i++;
System.out.printf("i=%s\n", i);
System.out.printf("j=%s\n", j);
System.out.printf("k=%s\n", k);
}
}
// 输出:
//i=4
//j=1
//k=11