首页 > 学院 > 开发设计 > 正文

关于++、--

2019-11-14 22:37:42
字体:
来源:转载
供稿:网友
关于++、--

注:本文还没有改完。周末在改……望见谅……

i++和++i使用的不同点在于,前者是同一语句中的下一个表达式执行完后自增,后者是立即自增。

image

我们来看一下核心的字节码:

 0: iconst_0 //将int型0推送至栈顶 1: istore_1 //将栈顶int型数值存入第二个本地变量 2: iload_1 //将第二个int型本地变量推送至栈顶 3: iinc          1, 1 //将指定int型变量增加指定值(i++, i--, i+=2) 6: istore_1 //将栈顶int型数值存入第二个本地变量 7: return

再来看一个计算:

j++执行完在执行“=”

我们来看一下核心的字节码:

0: iconst_0                          //将int型0推送至栈顶1: istore_1                          //将栈顶int型数值存入第二个本地变量2: iload_1                           //将第二个int型本地变量推送至栈顶3: iinc          1, 1                //将指定int型变量增加指定值(i++, i--, i+=2)6: istore_2                          //将栈顶int型数值存入第三个本地变量7: return

执行流图为:

j++后面没有其他的表达式,所以j不会自增。即,等号右边最后一个j++不会执行自增运算。所以程序中不要出现像j=j++这样的语句,因为它是无效的,应该用j+=1或者j=++j来代替。

image

由上面的图可以看出,程序首先执行++j,所以在往下执行前加给j加1,所以此时,j=1,然后执行j++,j不会立即自增,所以j还是1,继续下一个j++,j还是不会立即自增,但是现在就要执行前一个j++的++操作了,所以现在j=2,然后执行最后一个j++,同理,这个j不会立即++,所以此时j=2,之后便要为第二个j++执行++操作,所以此时的j=3。程序后面不在有表达式。所以程序结束,最后一个j++的++运算被抛弃了。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表