91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中i = i++和i =++i的區別是什么

發布時間:2021-02-03 14:51:00 來源:億速云 閱讀:203 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關java中i = i++和i =++i的區別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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++是先賦值,再計算導致,但是為什么先賦值呢?

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型數值存入第二個本地變量(變量就是i)
 2: iinc  將指定int型變量增加指定值(如i++, i--, i+=2等)
 5: return

上圖是i++的字節碼,++i的和i++的一摸一樣,0和1就是最基礎的給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型數值存入第二個本地變量
 2: iload_1 將第二個int型本地變量推送至棧頂
 3: iinc  將指定int型變量增加指定值(如i++, i--, i+=2等)
 6: istore_1 將棧頂int型數值存入第二個本地變量
 7: return

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

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

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

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

看完上述內容,你們對java中i = i++和i =++i的區別是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潜山县| 开阳县| 昔阳县| 大余县| 沁水县| 朝阳县| 水城县| 搜索| 海城市| 盐津县| 余庆县| 玉树县| 丰镇市| 抚松县| 寿阳县| 托克逊县| 车致| 巍山| 大新县| 乾安县| 玛曲县| 台山市| 四会市| 塘沽区| 潍坊市| 久治县| 漳浦县| 府谷县| 辉南县| 上蔡县| 隆德县| 辽宁省| 松原市| 安徽省| 新密市| 会昌县| 长垣县| 漯河市| 巴东县| 蒙山县| 沂南县|