j++和++j的结果都是+1,但是在指令级的操作模式完全不一样

以下代码输出结果为:0

    public static void main(String[] args) {int j = 0;for(int i = 0; i < 10; i++){j= j++; }System.out.println(j);}

javap -c  类.class会生成以下指令集信息

0: iconst_0          //将int型(0)推送至栈顶

1: istore_1           //将栈顶int型数值存入下标为1的本地变量

2: iconst_0          //将int型(0)推送至栈顶

3: istore_2          //将栈顶int型数值存入下标为2的本地变量

4: goto          15   //跳转到15行

 7: iload_1           //将下标为1的int型本地变量推送至栈顶

 8: iinc          1, 1    //将下标为1的int型变量增加指定值  (i++, i--, i+=2) 

11: istore_1         //将栈顶int型数值存入下标为1的本地变量

12: iinc          2, 1   //将下标为2的int型变量加1

15: iload_2          //将下标为2的int型本地变量推送至栈顶

16: bipush        100   //将单字节的常量值(-128~127)推送至栈顶

18: if_icmplt     7       //比较栈顶两int型数值大小,当结果小于0时跳转到第【7】行

21: getstatic     #16     // Field java/lang/System.out:Ljava/io/PrintStream;      //获取指定类的静态域,并将其值压入栈顶

24: iload_1       //将第二个int型本地变量推送至栈顶-------------

25: invokevirtual #22                 // Method java/io/PrintStream.println:(I)V  //调用实例方法

28: return

重点指令集解析:

iload_1:  j在变量表里面的下标为1,将j的值推到操作数栈中j=0;

iinc :这个操作是在本地变量表里面将j+1;此时j=1;并未改变操作数栈里面j的值

istore_1;     j=j++ ; 将操作数栈里面j的值赋给局部变量表里面的j,此时j=0;

将j=j++,改为j=++j;

7: iinc          1, 1   //将下标为1的局部变量(j)加1,此时j=1;
10: iload_1           //将下标为1的局部变量(j)推到操作数栈,此时操作数栈里面,j=1;
11: istore_1        //将操作数栈栈顶的值赋给局部变量表中下标为1的局部变量(j)此时j=1;

最后输入的结果为:10

j++与++j的区别相关推荐

  1. 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"1024"领取公众号专属资料 欢迎跳转到本文的原文链接:https://honeypp ...

  2. i = i++, i = ++i, j = i++, j = ++i 的区别

    题目来源牛客网上面练习的一道题目: 检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果. package algorithms.com.guan.javajicu; public ...

  3. c语言for循环中i,C语言for循环语句中a[i][j]和a[j][i]有什么区别

    匿名用户 1级 2014-04-27 回答 可以将i 理解成行,j 理解成列,a[i][j]和a[j][i]取值不同 比如,假设一个3维数组(你的是5x5),数值分别为: 1 2 3 4 5 6 7 ...

  4. j = j ++ 和 j = ++ j的区别

    今天看到一个题,问下面代码输出来是答案是多少: public class Test {public static void main(String[] args) {int j = 0;for(int ...

  5. java中j=j++和j=++j的理解

    先来看一段程序: public class Test1 {public static void main(String[] args) {int j = 0;for(int i = 0; i < ...

  6. C语言之int k,j,s; for (k=2;k6;k++,k++)/*for(k=2;k6;k=k+2)*/ {s=1; for(j=k;j6;j++) s+=j; }输出结果为10

    #include <stdio.h> int main(){ int k,j,s; for (k=2;k<6;k++,k++)/*for(k=2;k<6;k=k+2)*/ {s ...

  7. 快速理解j=j++ 和 j=++j(新手入门)

    快速理解j = j++ 和 j = ++ j(新手入门): j = j++ ,代码如下: public class TestDemo {/*** @param args*/public static ...

  8. KMP算法原理描述,告诉你为什么要“j = next[j]”

    KMP算法原理描述,告诉你为什么要"j = next[j]" 研究KMP算法的起因,是在刷leetcode的 214.最短回文串时,一开始使用了 O ( n 2 ) O(n^2) ...

  9. java中j 和 j啥区别_从字节码层次分析++j和j++的区别

    一.缘起 最近看到个面试题: int j = 0; for(int i = 0; i <100; i++) j = j++; System.out.println(j); 输出结果是0,如果换成 ...

最新文章

  1. python oop求三角形面积公式_python学习日记(OOP——类的内置方法)
  2. python五十九: slots属性
  3. mysql 注入用例_mysql-常用注入渗透手法
  4. Zuul:Pre和Post过滤器(上)
  5. daily-question-01(前端每日一题01)
  6. error LNK2005: void * __cdecl operator new(unsigned int) (??2@YAPAXI@Z) already defined in LIBCMT.
  7. 479 Largest Palindrome Product 最大回文数乘积
  8. 使用Eclipse构建Maven项目 (step-by-step) (转收藏)
  9. Eclipse — 如何快速生成servlet类和配置文件(web里)
  10. spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web
  11. AI配音专家(文字转语音真人发声工具)官方中文版V1.0.5 | 文字转语音软件下载 | 这是一款阿里语音合成引擎且能把文字读出来的软件
  12. 管家机器人先生txt_《管家机器人先生》主角墨青如玉最新章节章节目录
  13. t检验(t-test)临界值表(临界置信水平)
  14. 苏州大学在职研究生计算机专业,苏州大学在职研究生有哪些专业?
  15. WSUS客户端错误日志收集与持续更新!
  16. netty4 io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
  17. 完全数据驱动的对话模型和社交机器人
  18. win10 suse linux,Windows 10现已支持安装SUSE Linux子系统 附安装教程|蓝点网
  19. 使用IDL显示DICOM文件的信息
  20. htc a620d 刷android,千元WP8双核智能机 HTC 8S电信版评测

热门文章

  1. 项目工程重启后,用RedisTemplate获取不了在redis中存在的数据
  2. 【1月比赛合集】41场可报名的数据挖掘奖金赛,任君挑选!
  3. 虚拟机使用Ubuntu没声音
  4. php pos机刷卡,一清POS机不能刷卡的这些原因你知道几个?
  5. LiDAR数据下载步骤
  6. NAND flash 文件系统制作
  7. 解析jpeg数据时的问题_新乡回收电机小武:使用电机时出现问题的解析(2)
  8. access如何去重_如何在 1 秒内做到大数据精准去重?
  9. selenium之 autoit命令行参数
  10. 数码电脑显微镜_植物保护实验教学中心的数码显微互动系统