JavaSE面试题1 : 对自增变量的理解

    public static void main(String[] args) {
        // write your code here
        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);
    }

代码运行结果分别为:4,1,11

做此题时要理解 =,i++,++i 的工作原理

操作区分为两个,分别为:局部变量表和操作数栈,其中

1、 = 的作用为将操作数栈中的数值赋值给 = 前面那个变量的局部变量表中

2、i++的作用为先将 i的值放入操作数栈,后将i的局部变量修改加1

3、++i 的作用为 先将i的局部变量的值加1后放入操作数栈

i = i++ 中 i =1 ,经过i++ 后 栈中i=1,局部变量中 i = 2,后= 将栈中的1赋值给局部变量i后 i最后还为1

j = i++ 中 i=1 ,经过i++ 后 栈中i=1,局部变量中i = 2,后 = 将栈中的1赋值给局部变量j后,j=1 i =2

k = i + ++i * i++ :

首先 i = 2 得 栈中加入操作数2,后+ ++i 得 i的局部变量变为3,后将3加入栈中,i++ 得到栈中加入操作数3,i的局部变量变为4,后计算k=2+3*3 =11

最终得到 i = 4 ,j = 1 ,k = 11

你可能感兴趣的:(面试题大全,java,面试,javase)