广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    你知道java中 i=i++后i的值是多少么?之二

    来源:网络收集  点击:  时间:2024-04-22
    【导读】:
    Java中i=i++后的值是多少呢?前面一篇分享中,已经看到,是1如果i++后,不进行赋值操作,i的值又会是什么呢本文就聊聊这种情况工具/原料morejavajavapIntlliJ IDEA方法/步骤1/6分步阅读

    如果i++后,不进行赋值操作,i的值为2

    下面就来比较一下,这种情况生成的bytecode和上一个有什么不同

    先来看看改过后代码吧

    Show me the code.

    Code:

    package chapter4;

    /**

    * Created by MyWorld on 2016/3/17.

    */

    public class IPlusPlusDemo {

    public static void main(String args) {

    int i = 1;

    i++;

    System.out.println(i);

    }

    }

    2/6

    执行上面的代码,看看执行结果会是多少。

    终于是2了。和平时的认知保持一致了

    3/6

    看看这种情况的bytecode

    命令:

    javap -c IPlusPlusDemo.class

    4/6

    生成的btyecode:

    Compiled from IPlusPlusDemo.java

    public class chapter4.IPlusPlusDemo {

    public chapter4.IPlusPlusDemo();

    Code:

    0: aload_0

    1: invokespecial #1 // Method java/lang/Object.init:

    ()V

    4: return

    public static void main(java.lang.String);

    Code:

    0: iconst_1

    1: istore_1

    2: iinc 1, 1

    5: getstatic #2 // Field java/lang/System.out:Ljava/

    io/PrintStream;

    8: iload_1

    9: invokevirtual #3 // Method java/io/PrintStream.printl

    n:(I)V

    12: return

    }

    5/6

    按照上方的经验,找到相关的bytecode如下:

    0: iconst_1 //把int型常量1push到栈中,即int 1现在在栈顶了

    1: istore_1 //pop出栈顶的1,给i赋值。执行结束后i存放的值为1

    2: iinc 1, 1//自增指令。变量i的值++,即当前i的值为2

    所以,现在i的值是2了。

    当前bytecode的情况和实际执行的结果是一致的

    6/6

    和i=i++时是不是少了两条指令?

    少了的两条指令的作用是什么呢?

    2: iload_1 //将变量i的值1再压栈,即放到栈顶。这条指令为什么少了呢?是不是进行++运算而进行的特殊处理呢

    6: istore_1 //这个就是i=i++中的赋值操作。没有赋值,少了这条指令是对的

    JAVABYTECODEJAVAP
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.ff371.cn/art_568061.html

    相关资讯

    ©2019-2020 http://www.ff371.cn/ 国ICP备20009186号05-10 20:10:38  耗时:0.027
    0.027s