局部变量&操作数栈面试题

i、j、k分别是多少

public static void main(String[] args) {
    int i = 1;
    i = i++;
    int j = i++;
    int k = i + ++i + i++;
    System.out.println(i);
    System.out.println(j);
    System.out.println(k);
}

分析过程

i = i++;
  1. 将i=1压入操作数栈
  2. 将局部变量i自增成2
  3. 将操作数栈内的1赋值给变量i
int j = i++;
  1. 将i=1压入操作数栈
  2. 将局部变量i自增为2
  3. 将操作数栈中的1赋值给j
int k = i + ++i + i++;
  1. 将i=2压入操作数栈
  2. 将局部变量i自增成3
  3. 将3压入操作数栈
  4. 将3再次压栈
  5. 将局部变量i自增成4
  6. 进行3*3运算,将结果压栈
  7. 计算9+3压栈
  8. 将11赋值给k

总结

  • 赋值最后计算
  • =右边从左到右加载依此压入操作数栈
  • 实际运算看运算符优先级
  • 自增、自减直接修改局部变量到值,不经过操作数栈
  • 最后赋值之前,临时结果也是存储在操作数栈中
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。