1、例子程序,试想打印几,为什么?
public class db { public static void main(String[] args) { int i = 8; i = i++; System.out.println(i); } }
public class db2 { public static void main(String[] args) { int i = 8; i = ++i; System.out.println(i); } }
2、对了,没错,如您所想。第一个打印8, 第二个打印9 。
3、究其原理,从它们的字节码说起吧
第一个程序,main方法的字节码指令如下:
i++ 0 bipush 8 2 istore_1 //将栈顶int型数值存入第二个本地变量 3 iload_1 //将第二个int型本地变量推送至栈顶 4 iinc 1 by 1 // 局部变量自增指令:iinc 7 istore_1 // 将栈顶int型数值存入第二个本地变量 8 getstatic #2 <java/lang/System.out> 11 iload_1 12 invokevirtual #3 <java/io/PrintStream.println> 15 return
第二个字节码指定如下:
++1 0 bipush 8 2 istore_1 // 将栈顶int型数值(8)存入第二个本地变量 3 iinc 1 by 1 / 局部变量自增指令:iinc (8+1) 6 iload_1 //将第二个int型本地变量推送至栈顶 7 istore_1 // 将栈顶int型数值(9)存入第二个本地变量 8 getstatic #2 <java/lang/System.out> 11 iload_1 12 invokevirtual #3 <java/io/PrintStream.println> 15 return
比较可知,结果不同因为 “iinc 1 by 1 、iload_1”指令的顺序不同,一个是把局部变量表的值先自增(局部变量自增指令:iinc),iload_1 是将第二个int型本地变量推送至栈顶。另一个是将本地变量表变量+1后,压入栈顶,再存入第二个本地变量
4、常用字节码指令见https://www.cnblogs.com/tenghoo/p/jvm_opcodejvm.html
相关推荐
本文主要涉及的是九年级英语全册《Unit 6 I like music that I can dance to》的复习内容,涵盖了话题词汇、功能句型、定语从句、重点单词和短语以及重要句子。 一、话题与词汇(Mind Map) 1. 话题:音乐与个人...
I 多年来,我为定量研究人员举办了两个小时的实践课程,涉及正则表达式(请参阅参考资料)。 今年,我还被要求介绍一些基本的Web抓取技术。 这让我开始思考-进行网页抓取的最佳工具是什么? 这些也是最好的教学工具...
今天我挨个测试了一下个,最终还是觉得这个版本不错,第一系统反应快,第二最牛掰得就是稳定,稳定运行了2年了,以为其它系统会很好,没想到折腾了半天还是这个版本好用!于是又折腾了回去。温馨提示,这个是二合一...
Tini是您可能想到的最简单的init 。 Tini所做的全部工作就是产生一个孩子(Tini本应在容器中运行),并等待它退出所有时间,同时收获僵尸并执行信号转发。 为什么选择蒂尼? 使用Tini有几个好处: 它可以保护您...
当`j - i == 1`时,`f[i][j] = a[i] + a[j]`,其中`a[i]`和`a[j]`分别表示第`i`个和第`j`个石子的分数。 4. **最终结果**:最后,我们需要遍历所有的`f[i][n]`(其中`n`是石子总数),找到其中的最大值作为最终答案...
php的json和数组相互转换,ci框架遇到的一些问题总结,以及图片上传的一些功能
左两点的路径数目之和,因此我们可以使用逐列(或逐行)递推的方法来求出从起始顶点到重点的路径数目,即使有障碍(我们将马的控制点称为障碍),这一方法也完全适用,只要将到达该点的路径数目置为0即可,用F[i,j]...
而让我眼前一亮的是微格,它的操作方式可以看成是navigation+swipe,上手感觉很顺畅,手指的操作也很自然,这让我想起了前段时间诺基亚发布的N9,N9强调的一种用户体验就是swipe,一种最自然的手势。 自己也在iphone...
而让我眼前一亮的是微格,它的操作方式可以看成是navigation+swipe,上手感觉很顺畅,手指的操作也很自然,这让我想起了前段时间诺基亚发布的N9,N9强调的一种用户体验就是swipe,一种最自然的手势。 自己也在...
仿ipod图片展示(含源码) 最近要做一个类似苹果ipod的图片展示效果,于是在网上搜,可一直搜不到源码。悲剧,后来决定自己试试,没想到还误打误撞给弄出来了,效果感觉还可以,希望对大家有用,欢迎留言提意见,谢谢
- 学习和谈论音乐,包括词汇如lyric(歌词)、gentle(柔和的)、remind of(使想起)、exhibition(展览)、prefer(更喜欢)、photographer(摄影师)、energy(能量)等。 2. **教学流程(Procedures)** - **...
需要注意的是,used to 和 would 也可以用来描述过去习惯性的动作。 2. 一般过去时表现在 在某些特殊情况下,一般过去时可以用来描述现在的状态或动作,例如: * 在宾语从句中,由于时态呼应的关系,可以用一般...
它的用法包括`dislike doing sth.` 和 `dislike sth.`,例如:`I dislike playing football.`(我不喜欢踢足球。) - **recently**:这是一个副词,表示最近,用于谈论过去发生的事情,通常与现在完成时态搭配,...
Java I/O系统主要由以下四类流组成: - **InputStream**: 用于读取原始字节流。 - **OutputStream**: 用于写入原始字节流。 - **Reader**: 用于读取字符流。 - **Writer**: 用于写入字符流。 每种流都有其特定的...
当然很容易就可以想到,从后到前进行此操作是最理想的。经过上述的操作之后,我们就能很容易的把问题转化为“找相同连续数字的最大长度”了。这也是非常简单的,只需一次扫描数组就能计算结束了。 代码实现: ```c...
这篇资料是针对湖北省南漳县肖堰镇肖堰初级中学九年级学生的英语课程,主题为“Unit 6 I like music that I can dance to”的第二课时。本课旨在帮助学生掌握一系列与音乐相关的词汇和表达方式,同时训练他们使用...
第一章 绪论 1.16 void print_descending(int x,int y,int z)//按从大到小顺序输出三个数 { scanf("%d,%d,%d",&x,&y,&z);...如果采用递归编程(大多数人都会首先想到递归方法),则时间复杂度将高达O(k^m).
第一章 绪论 1.16 void print_descending(int x,int y,int z)//按从大到小顺序输出三个数 { scanf("%d,%d,%d",&x,&y,&z);...如果采用递归编程(大多数人都会首先想到递归方法),则时间复杂度将高达O(k^m).
严蔚敏的算法设计答案 第一章 绪论 1.16 void print_descending(int x,int y,int z)//按从大到小顺序输出三个数 { scanf("%d,%d,%d",&x,&y,&z);...(大多数人都会首先想到递归方法),则时间复杂度将高达O(k^m).
- 使某人想起或意识到……:remind sb. of or make sb. aware of... - 各种不同的音乐:all kinds of music - 随着音乐起舞:dance along with the music - 伴随…歌唱:sing along with... 3. 句子翻译: - I...