j++与++j的区别
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的区别相关推荐
- 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?
点击上方"朱小厮的博客",选择"设为星标" 后台回复"1024"领取公众号专属资料 欢迎跳转到本文的原文链接:https://honeypp ...
- i = i++, i = ++i, j = i++, j = ++i 的区别
题目来源牛客网上面练习的一道题目: 检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果. package algorithms.com.guan.javajicu; public ...
- 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 ...
- j = j ++ 和 j = ++ j的区别
今天看到一个题,问下面代码输出来是答案是多少: public class Test {public static void main(String[] args) {int j = 0;for(int ...
- java中j=j++和j=++j的理解
先来看一段程序: public class Test1 {public static void main(String[] args) {int j = 0;for(int i = 0; i < ...
- 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 ...
- 快速理解j=j++ 和 j=++j(新手入门)
快速理解j = j++ 和 j = ++ j(新手入门): j = j++ ,代码如下: public class TestDemo {/*** @param args*/public static ...
- KMP算法原理描述,告诉你为什么要“j = next[j]”
KMP算法原理描述,告诉你为什么要"j = next[j]" 研究KMP算法的起因,是在刷leetcode的 214.最短回文串时,一开始使用了 O ( n 2 ) O(n^2) ...
- java中j 和 j啥区别_从字节码层次分析++j和j++的区别
一.缘起 最近看到个面试题: int j = 0; for(int i = 0; i <100; i++) j = j++; System.out.println(j); 输出结果是0,如果换成 ...
最新文章
- python oop求三角形面积公式_python学习日记(OOP——类的内置方法)
- python五十九: slots属性
- mysql 注入用例_mysql-常用注入渗透手法
- Zuul:Pre和Post过滤器(上)
- daily-question-01(前端每日一题01)
- error LNK2005: void * __cdecl operator new(unsigned int) (??2@YAPAXI@Z) already defined in LIBCMT.
- 479 Largest Palindrome Product 最大回文数乘积
- 使用Eclipse构建Maven项目 (step-by-step) (转收藏)
- Eclipse — 如何快速生成servlet类和配置文件(web里)
- spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web
- AI配音专家(文字转语音真人发声工具)官方中文版V1.0.5 | 文字转语音软件下载 | 这是一款阿里语音合成引擎且能把文字读出来的软件
- 管家机器人先生txt_《管家机器人先生》主角墨青如玉最新章节章节目录
- t检验(t-test)临界值表(临界置信水平)
- 苏州大学在职研究生计算机专业,苏州大学在职研究生有哪些专业?
- WSUS客户端错误日志收集与持续更新!
- netty4 io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
- 完全数据驱动的对话模型和社交机器人
- win10 suse linux,Windows 10现已支持安装SUSE Linux子系统 附安装教程|蓝点网
- 使用IDL显示DICOM文件的信息
- htc a620d 刷android,千元WP8双核智能机 HTC 8S电信版评测