最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中i = i++和i =++i的深入講解

 更新時間:2021年02月01日 16:28:39   作者:最底層的程序員  
這篇文章主要介紹了java中i = i++和i =++i的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
public class Count {
 public static void main(String[] args) {
 int i = 0;
 i = i++ ;
 System.out.println(i);
 }
}

上面代碼輸出的i為0,如果是把i = i++換成i=++i,又會輸出1,這是由于i++是先賦值,再計算導(dǎo)致,但是為什么先賦值呢?

public static void main(String[] args) {
 int i = 0;
 i++ ;
 }

 public static void main(java.lang.String[]);
 Code:
 0: iconst_0 將int型0推送至棧頂(找到0)
 1: istore_1 將棧頂int型數(shù)值存入第二個本地變量(變量就是i)
 2: iinc  將指定int型變量增加指定值(如i++, i--, i+=2等)
 5: return


上圖是i++的字節(jié)碼,++i的和i++的一摸一樣,0和1就是最基礎(chǔ)的給i賦值為0,iinc就是把i自增。

但是如果加上一個i=i++呢?

// i = i++;
 public static void main(java.lang.String[]);
 Code:
 0: iconst_0 將int型0推送至棧頂
 1: istore_1 將棧頂int型數(shù)值存入第二個本地變量
 2: iload_1 將第二個int型本地變量推送至棧頂
 3: iinc  將指定int型變量增加指定值(如i++, i--, i+=2等)
 6: istore_1 將棧頂int型數(shù)值存入第二個本地變量
 7: return

0和1依舊是給i賦值為0,2是把當前i的值推送到棧頂,然后iinc對局部變量表的i進行自增,6是把棧頂?shù)臄?shù)值賦給i,注意,2的時候推送到棧頂?shù)氖?,所以又變回0了。

// i = ++i
 public static void main(java.lang.String[]);
 Code:
 0: iconst_0 將int型0推送至棧頂
 1: istore_1 將棧頂int型數(shù)值存入第二個本地變量
 2: iinc  將指定int型變量增加指定值(如i++, i--, i+=2等)
 5: iload_1 將第二個int型本地變量推送至棧頂
 6: istore_1 將棧頂int型數(shù)值存入第二個本地變量
 7: return

i = ++i的時候,iinc往前提了一步,說明,在i的值被壓到棧頂前,先進行了自增,所以棧頂?shù)闹凳?,此時再賦值給局部變量表的里i,就是自增過的。

總結(jié):iinc操作是直接針對局部變量表的,不經(jīng)過操作棧,i++所謂的先賦值,從字節(jié)碼層面來看,就是i在進行自增前,先把原來的值存到了操作數(shù)棧,所以如果執(zhí)行b = i++,b之所以等于是i原來的值,就是由于操作數(shù)棧的值是自增前的值,而++i的,自增操作提前了,所以b=++i后,b的值和i的值一樣。

總結(jié)

到此這篇關(guān)于java中i = i++和i =++i的文章就介紹到這了,更多相關(guān)java中i = i++和i =++i內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

财经| 东乌| 左权县| 西峡县| 乌审旗| 江安县| 永和县| 井冈山市| 延安市| 偏关县| 广州市| 城步| 称多县| 澳门| 新昌县| 潜江市| 隆昌县| 阿坝县| 澄江县| 昌吉市| 海晏县| 怀来县| 嘉义县| 子洲县| 崇州市| 长岛县| 昔阳县| 双柏县| 团风县| 扎兰屯市| 临江市| 甘孜| 佛山市| 龙陵县| 平湖市| 乌鲁木齐县| 柳林县| 万盛区| 汪清县| 永仁县| 铁岭县|