与……形成对比,把…和…进行比较

与……形成对比,把…和…进行比较,第1张

i++和++i的区别(i++和++i的总结)

看下面这个案例。

inti = 1;I = i++;system . out . println(" I = "+I ");intj = i++;System.out.println("j="+ j+",I = "+I);

问题:

–` system . out . println(" I = "+I)" I ` output的结果是什么?–` system . out . println(" j = "+j+",I = "+I)" j `和` I `输出的结果分别是什么?

让我们看看这段代码是如何在jvm中执行的。

publicstaticvoidmain(Java . lang . string[])throws Java . io . io exception;描述符:([Ljava/lang/String;)v flags: ACC _ public,ACC _ staticcode: stack = 1,locales = 3,args _ size = 10:iconst _ 1//stack 1中的constant 1:istore _ 1//constant 1出栈,并保存到局部量表2的slot 1中的变量I:iload _ 1//slot 1。第一个1是槽6的索引:istore_1//在指令2中,常量1被推出堆栈保存在局部变量表7的槽1中:iload_1//槽1中变量I的值被推入堆栈8:iinc1,1//在局部变量表的槽1中,常量1递增111:istore_2//在指令7中,保存到局部变量table 12的slot 2:returnline numberable:line 54:0 line 55:2 line 56:7 line 68:12 local variable table:startlength slotnamesignature 0130 args[ljava/lang/string;2111 ii 1212 Jie exceptions:throws Java . io . ioexceptionmethod parameters:nameflags gsstatic { };描述符:()Vflags:ACC_STATICCode:stack=1,locals=0,args _ size = 00:LDC # 2//Class com/insure smart/test 2:invoke static # 3//Method org/SLF 4j/logger factory . get logger:(Ljava/lang/Class;)Lorg/slf4j/Logger;5:putstatic#4 //现场日志:Lorg/slf4j/Logger;8:returnline number table:line 18:0 }源文件:" Test.java "

inti = 1;I = i++;

相应的jvm指令如下

0:iconst_1//栈中的常量1:istore_1//栈外的常量1,保存在局部变量表2的槽1中:iload_1//栈3的槽1中的变量I的值:iinc1,1//局部变量表的槽1中的变量I递增1。第一个1是槽6的索引:istore_1//指令2中的常数1从堆栈中取出,存储在局部变量表的槽1中。

看i++不难。在jvm中执行时,首先将I的值推入堆栈,然后I在局部变量表中递增。

所以上面抛出的问题的答案自然就出来了。

system.out.println ("I ="+I) I输出的结果是什么?i=1

System.out.println ("j ="+j+",I = "+I)j和I输出的结果分别是什么?j=1,i=2

看下面这个案例。

inti = 1;I = ++ I;I = i++;

让我们看看这段代码是如何在jvm中执行的。

publicstaticvoidmain(Java . lang . string[])throws Java . io . io exception;描述符:([Ljava/lang/String;)v flags: acc _ public,acc _ staticcode: stack = 1,locales = 2,args _ size = 10:iconst _ 1//constant 1:istore _ 1//出栈,保存在局部变量表2:iinc1,1//局部变量表,变量I的自增长5:iload_1//局部变量表中变量I的值(2)推入6:istore_1//指令5中的数据被推出并保存在局部变量表7:iload_1//局部变量表中变量I的值

相应的jvm指令

0:iconst_1//常量1被推入堆栈1:istore_1//保存到局部变量表2:iinc1,1//在局部变量表中,变量I自增。5:iload_1//将局部变量表(2)中变量I的值推入堆栈6:istore_1//在指令5中。

+I是先自长,后栈。

当i++和++i执行运算时,

++我会先放入堆栈,然后自增。

+I会先递增,然后返回堆栈。

欢迎分享,转载请注明来源:聚客百科

原文地址: https://juke.outofmemory.cn/life/234644.html

()
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存