运行 i=i++ 之后,i的值是多少?代码如下:

public class A{public static void main(String[] args){int i=0;i=i++;System.out.println(i);}}

答案是:打印出 0

为什么呢?是因为java虚拟机中有局部变量区和操作数栈之分。iinc指令是对局部变量区中的整数进行加1,而istone_n是将操作数栈顶元素赋值给n号局部变量

看下字节码就明白了:

首先使用javap -c 命令反编译一下class文件,看下生成的字节码就知道到底发生了什么。字节码如下:

public class A {public A();Code:0: aload_01: invokespecial #1                  4: returnpublic static void main(java.lang.String[]);Code:0: iconst_0              //(1)                1: istore_1              //(2)                2: iload_1               //(3)                3: iinc          1, 1    //(4)            6: istore_1              //(5)            7: return
}

(1)定义常量0,在字节码里,-1~5可以表示为iconst_n形式,也就是用常量来表示,不在这个范围的数,则要用bipush n或sipush n来表示,也就是将数存入栈中

(2)istone_n指令可以从栈顶取一个整形数据存储在局部变量区中,n代表在局部变量区中的位置,只能取0,1,2,3,其它的数,则要用istore指令

(3)指定的int型局部变量进栈

(4)局部int型变量增加指定值(而此时栈顶元素的值并没有变化,还是0)

(5)取栈顶元素赋值给局部变量i

i = i++ 之后 i 的值为什么是 0相关推荐

  1. python尝试不同的随机数进行数据划分、使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征的卡方检验的p值,如果所有p值都大于0.05则训练集和测试集都具有统计显著性、数据划分合理

    python尝试不同的随机数进行数据划分.使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征(categorical)的卡方检验的p值,如果所有p值都大于0.05则退出循环.则训练集和测试 ...

  2. R语言把dataframe中的NA值替换为0

    R语言把dataframe中的NA值替换为0 目录 R语言把dataframe中的NA值替换为0 缺失值替换 方法总结 缺失值替换

  3. [异常解决] MPU6050启动异常读出陀螺仪和加速度计的值全为0的解决办法

    在调试一个自己做的手环,每次用keil烧写好程序运行的蓝牙.陀螺仪都是正常的.但是掉电再上电之后蓝牙是好的.陀螺仪可以读出ID但是读出的加速度和角速度数据全为0. 下面是发生问题时main函数的前面部 ...

  4. 灰度值取值范围_一幅灰度图像,用8bit量化,取值范围为[0,255],其中0表示(),255表示()。...

    一幅灰度图像,用8bit量化,取值范围为[0,255],其中0表示(),255表示(). 答: 纯黑色 纯白色 <董西厢>的内容中有一些是征引的<莺莺传>.() 答:√ 智慧职 ...

  5. 成功解决r2_score函数输出值始终为0的情况

    成功解决r2_score函数输出值始终为0的情况 目录 解决问题 解决方法 解决问题 r2_score函数输出值始终为0 解决方法 将 r2_score(test_y, test_predict) 改 ...

  6. c语言stdio中null的值,C/C++编程笔记:C语言NULL值和数字 0 值区别及NULL详解

    原创 程序员无言 2020-07-01 在学习C语言的时候,我们常常会碰到C语言NULL值和数字 0 ,很多小伙伴搞不清楚他们之间的一个区别,今天我们就了解一下他们之间的区别,一起来看看吧! 先看下面 ...

  7. c++ 动态数组初始值不为0?

    c++ 动态数组初始值不为0? 对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作: int *pia = new int[10]; // 每个元素都没有初 ...

  8. 关于 RT-Thread 内核调度算法中 __rt_ffs函数为什么要检测 value值是否为0的疑问

    产生一个好的想法,最佳方法就是先产生许许多多的想法. The best way to have a good idea is to have a lot of ideas. – 鲍林(Linus Pa ...

  9. 【Python3.7】就餐人数:在为完成练习 9-1 而编写的程序中,添加一个名为 number_served 的属性,并将其默认值设置为 0。根据这个类创建一个名为 restaurant 的实例

    # [Python3.7]就餐人数:在为完成练习 9-1 而编写的程序中,添加一个名为 number_served的属性,并将其默认值设置为 0.根据这个类创建一个名为 restaurant 的实例: ...

  10. Tableau 将 null 值显示在 0 处 (ZN 函数 或 显示特殊值)

    Tableau 将 null 值显示在 0 处 一.通过 ZN 函数将空值返回 0 二.显示特殊值并将 null 显示在 0 处 很多朋友在作图时,会发现由于数据源中某些数据缺失或不存在,导致制作的图 ...

最新文章

  1. 关于IT人职业道德的反思(转)
  2. php nginx exec失败,小白问题:用nginx配置php后nginx无法启动。
  3. 按键精灵 getcursorpos没有用_给你们想要的一键输出II按键精灵脚本开发教程
  4. 语言解析ssl包_HPSocket v5.0.1:支持 IPv6 及多 SSL 证书
  5. python按字节读取文件_Python读取二进制文件
  6. php如何修改文件名,php修改文件名的实现方法_后端开发
  7. 压缩/批量压缩/合并js文件
  8. [转]easyui 全部图标
  9. pyqt5信号与槽连接的生命周期与对象引用的生命周期
  10. Linux第十一周微职位
  11. 《自控力》-自控力极限
  12. Servlet技术 - Servlet应用
  13. 海尔构建全球首个智能制造云平台COSMO
  14. 正点原子开发板 使用 mfgtool 上位机固化系统至emmc报错 mfgtool “Push“ error, file=“xxxxx“
  15. vue脚手架安装很慢_vue-cli3脚手架安装
  16. 网络托管巨头百万数据外泄、超900万安卓设备感染木马|11月24日全球网络安全热点
  17. luogu4061 大吉大利,晚上吃鸡!
  18. Mybatis项目错误:Type interface dao.UserMapper is not known to the MapperRegistry.
  19. 易班轻应用开发:PHP版
  20. 如何检测设备的联网状态?

热门文章

  1. 移动端阻止body左右偏移
  2. 小程序自带git方法提交时文件冲突的解决
  3. Android 语音播报,语音识别demo
  4. 如何使用用window.open()
  5. 中文版php.ini
  6. c语言两个字符串比较,将两个字符串s1和s2比较,如果s1s2,数组编程:将2个字符串s1和s2比较。若s1s2输出1;若s1=s2,输出0;若s1s2,输出-1(不能用strcmp函数)...
  7. swagger接口文档使用
  8. 实验15 安装新的int 9中断例程
  9. leetcode 102 C++AC
  10. window的war发布Linux失败,为什么war包在Windows的tomcat正常运行,在linux服务器报errorpage错误?...