学java必须搞懂这道计算题

分享一道经典的Java计算题,分享的同时也帮助基础薄弱的自己进一步加深理解:

 

附上代码:

package com.java_foundation.arithmetic;

public class ClassicalCalculation_1 {
    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="+i);
        System.out.println("k="+i);
    }
}

可以先自己想一下输出的是什么 ?

 

idea打开ViewàShow ByteCode,查看下字节码指令,通过字节码来分析它的整个运行流程,这里我大致分析了下过程,总结了为下图。

 

 

输出:

i=4

j=1

k=11

 

小结:

1、赋值=是最后计算的

2、=号右边的从左到右加载值依次压入操作数栈

3、实际先算哪个需要根据运算符的优先级来判定

4、自增、自减操作都是直接修改变量的值,不经过操作数栈,这里是误解比较大的地方

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值