一道简单的JAVA面试题

来看一道简单的java面试题:

public static void main(String[] args) {
        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,j,k最终等于多少?
思考片刻请参考下方的答案。。。
在这里插入图片描述

package jobInterview.basic;

/**
 * 理解局部变量表和操作数栈
 * 理解运算优先级
 * @author zhangjinglong
 * @date 2020-03-03-10:13 下午
 */

public class Increament {
    public static void main(String[] args) {
        int i=1; //1
        i=i++;   //i++ 2    赋值操作后,i变1
        int j=i++;  //j=1   i++后 i为2
        int k=i+ ++i *i++; //1. i入操作数栈 栈内 2.++i i变3,栈内 2 3, 3,i++ i先入栈,栈内 2 3 3,i++后i为4
        //4.把操作数栈中前两个弹出来求乘积,结果再压入栈  栈内 2 9    5.把操作数栈中的值弹出来求和再赋值给k,此时,栈空,k=11


        System.out.println("i="+i);//4
        System.out.println("j="+j);//1
        System.out.println("k="+k);//11
    }
}

小结

  • 赋值 = 最后计算

  • =右边的从左到右加载值一次压入操作数栈

  • 实际先算哪个,看运算符优先级

  • 自增、自减操作都是直接修改变量的值,不经过操作数栈

  • 最后的赋值之前,临时结果也是存储在操作数栈中

  • 建议《JVM虚拟机规范》关于指令的部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值