【Java面试题】你是否了解i++与++i

今天在学校的招聘会中,感觉面试的并不是很理想,准备用一个月的时间来准备Java面试,向着梦想前进

直接上题

@Test
    void t1(){
        int i=1;
        i=i++;
        int j=i++;
        int k=i + ++i * i++;
        System.out.println("i="+i);
        System.out.println("j="+j);
        System.out.println("k="+k);
    }

写在了测试类中

熟悉的代码,但你真的知道答案么

 

先在心里想好你的答案再往下看哦~

 

 如果和你想的不一样,那就看看下面的分析过程

这里就得说局部变量表和操作数栈了

当你执行第一步,i=i++;时,这里局部变量i变为1,因为i++的++在后面,操作数栈中的值也变为1,这时进行++操作,局部变量表中的i的值变为2,然后通过赋值运算符计算i的值,最终i的值变为1

这里j的分析过程中,先看i的值变化,i首先在局部变量表中为1,然后因为i++的操作,这时操作数栈中的值变为1,当进行++操作时,i的值变为2,而操作数栈中的值为1,赋值给j,这时j的值为1

最后分析k的过程,i的值为2,++i时,i的值变为3,i++时i的值不变,而操作数栈中的值变为1,这时计算++,i的值变为4,这时进行赋值操作,2+3*3=11,11为k的值

posted @ 2020-09-26 12:31  龙欺  阅读(225)  评论(0)    收藏  举报