注:本文还没有改完。周末在改……望见谅……
i++和++i使用的不同点在于,前者是同一语句中的下一个表达式执行完后自增,后者是立即自增。
我们来看一下核心的字节码:
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来代替。
由上面的图可以看出,程序首先执行++j,所以在往下执行前加给j加1,所以此时,j=1,然后执行j++,j不会立即自增,所以j还是1,继续下一个j++,j还是不会立即自增,但是现在就要执行前一个j++的++操作了,所以现在j=2,然后执行最后一个j++,同理,这个j不会立即++,所以此时j=2,之后便要为第二个j++执行++操作,所以此时的j=3。程序后面不在有表达式。所以程序结束,最后一个j++的++运算被抛弃了。
新闻热点
疑难解答