最近网上看到一个面试题目是关于i++和++i,对于i++ 和++i 很多人都知道是不一样的,i=i++ 和 i=++i, 未必有人知道其中的奥妙,看了很多文章关于i++和++i的区别,都没有指出其中不一样的根本原因。有人说i++是线程安全的,有人说不是的,如果不是的那原因是什么呢?
我们先看下面一个例子
public class Test { public static void main(String[] args) { int i=0; i=i++; int j=0; j=++j; } }
javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码, 通过查看字节码, 我们可以知道java代码在JVM中的运行过程
-l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出public和protected类和成员 -package 只输出包,public和protected类和成员,这是默认的 -private 输出所有类和成员 -s 输出内部类型签名 -c 输出分解后的代码,例如,类中每一个方法内,包含java字节码的指令, -verbose 输出栈大小,方法参数的个数
java编译器输出的指令流,基本上是基于栈的指令集架构,指令流里面的指令大部分都是零地址指令,他们依赖操作数栈进行工作。
运行 javap -verbose Test,
public static void main(java.lang.String[]); Code: Stack=1, Locals=3, Args_size=1 0: iconst_0 //首先,执行偏移地址为0的地址,把0入栈(栈顶=0), 1: istore_1 //把栈顶的值放到局部变量1中,即i中(i=0,栈顶=0) 2: iload_1 //把局部变量1的值,即0入栈,也就是说此时栈顶的值是0(i=0,栈顶=0) 3: iinc 1, 1 //把局部变量1,也就是i,增加1,这个指令不会导致栈的变化,i此时变成1了(i=1,栈顶=0) 6: istore_1 //把栈顶的值放到局部变量1中,即i中,栈顶的值是0,此时(i=0,栈顶=0) 7: iconst_0 //把0入栈(栈顶=0) 8: istore_2 //把栈顶的值放到局部变量2中,即j中(j=0,栈顶=0) 9: iinc 2, 1 //把局部变量2,也就是j,增加1,这个指令不会导致栈的变化,j此时变成1了 12: iload_2 //把局部变量2的值,即1入栈,此时(j=1,栈顶=1) 13: istore_2 //把栈顶的值放到局部变量2中,即j中(j=1) 14: return LineNumberTable:
相关推荐
INTEL Pcie 转千兆网 I210IT+H5020NL+RJ45 AD设计硬件原理图库+PCB封装库文件,PcbLib+SchLib格式,Altium Designer原理图库+PCB封装库文件,已在项目中验证使用,可作为你产品设计的参考也可以直接应用到你的项目...
iphone4S原理+位置图纸·绝对保真·原厂图纸
基于STC15W404AS单片机设计的爱情心形钻戒ad设计硬件原理图+PCB+软件源码,硬件采用2层板设计,圆型板,Altium设计原理图+PCB+软件源码,可供学习设计参考, void main() { uint8 i = 0; P1M1 = 0X00; P1M0 = 0...
3(20分)令文法为 E→T∣E+T∣E-T T→F∣T*F∣T/F F→(E)∣i (1)给出i+i*i、i*(i+i)的最左推导和最右推导 (2)给出i+i+i、i+i*i的语法树
F5部署红宝书Part+I+-+基础安装部署L:· 安装前准备 · 设备初始化 · ⺴⽹网络层配置 · N+M原理 · Active/Standby配置 · Active/Active/Standby配置 · 安全配置基线 · VIPRION配置注意...
未列全,有核心板电路原理,各芯片手册 ├─ic │ Allwinner_A40i_Datasheet_V1.1.pdf │ Allwinner_A40i_User_Manual_V1.1.pdf │ ├─开发板规格书 │ UW-M135-V1.1 技术规格书.pdf │ └─硬件 │ Allwinner ...
STM32H753ZIT6+XC6slx150tfgg484I+TMS320F28335PGFA原理图pcb设计源文件
STM32F103C8T6+ACS758电流传感器设计4为8段数码显示电流表ALTIUM硬件原理图+PCB+软件源码,2层板设计,大小为100x50mm,单面面布局双面布线,Altium Designer 设计的工程文件,包括完整的原理图及PCB文件,可以用...
是编译原理语法分析器的实验报告,对文法是否是LL1的判定以及对(i+i)*i和i+i)*i的判断
i2c扩展板+电源板+传感器板的原理图+PCB+其它设计资料.zip
构造LL(1)语法分析程序,任意输入一个文法符号串,并判断它是否为文法的一个句子。程序要求为该文法构造预测分析表,并按照预测分析算法...根据已建立的分析表,对下列输入串:i+i*i进行语法分析,判断其是否符合文法。
I.MX RT1052+SIM7600CE-PCIE板AD设计硬件原理图+PCB+封装库,采用4层板设计,板子大小为62x60mm,双面布局布线,主要器件包括MIMXRT1052CVL5A,MX25L6436FM2I,IS42S16160J-7TLI,SIM7600CE-PCIE模块等。Altium...
包含两个文件:原厂iPhone6S 4.7点位图.pdf、原厂iPhone6S 4.7电路原理图.pdf
6、 设<表达式>为E,<项>为T,<因子>为F,注:推导过程不能...(4) E => E+T => T+T => T*F+T => F*F+T => i*F+T => i*i+T => i*i+F => i*i+i (6) E => E+T => T+T => F+T => i+T => i+T*F => i+F*F => i+i*F => i+i*I
A40I原理图,包含整机图纸,包含内存,falsh wifi 电源部分,USB接口,可以直接使用
基于MSP430F1611I单片机+DHT11+BH1710+HMC5883L传感器应用评估板硬件(原理图+PCB)工程文件,AD09设计的工程文件,仅供学习及设计参考。
正点原子STM32F407开发板ALTIUM原理图+PCB图+2D封装库+BOM文件,采用2层板设计,板子大小为160x121mm,双面布局布线,可以用Altium Designer(AD)软件打开或修改,可作为你产品设计的参考。 正点原子 STM32F407 探索...
基于i.MX-RT1052处理器+SDRAM智能面板控制板硬件(原理图 +PCB) +AD封装库+BOM+关键器件手册,PCB硬件采用4层板设计,大小为84x83mm,Altium Designer 设计的工程文件,包括完整的原理图及PCB文件,可以用Altium(AD)...
i.MX-RT1052+PSRAM智能面板控制板PDF原理图PCB+AD集成封装库,LTIUM工程转的PDF原理图PCB文件+AD集成封装库,已在项目中验证,可以做为你的设计参考。集成封装库器件列表: Library Component Count : 61 Name ...
asset-v1_BUAA+B3I062410+2017_T1+type@asset+block@计算机组成原理实验报告撰写排版规则1