国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java中i++的陷阱

2019-11-14 21:09:05
字體:
供稿:網(wǎng)友
java中i++的陷阱

面試陷阱題:

int i=0; i =i++;

  

此時(shí)i值:

先來查看JavaP源碼

Compiled from "Test.java"class Test {  Test();    Code:       0: aload_0       1: invokespecial #1                  // Method java/lang/Object."<init>":()V       4: return  public static void main(java.lang.String[]);    Code:       0: iconst_0       1: istore_1       2: iload_1                           //此處將i(0)讀取到棧中       3: iinc          1, 1                 //自增      注意自增后并未入棧       6: istore_1                          //出棧賦值,棧頂值為0       7: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PRintStream;      10: iload_1      11: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V      14: return}

i最終為0;

根據(jù)一位大牛的回復(fù):

在這里jvm里面有兩個(gè)存儲(chǔ)區(qū),一個(gè)是暫存區(qū)(是一個(gè)堆棧,以下稱為堆棧),另一個(gè)是變量區(qū)。語句istore_1是將堆棧中的值彈出存入相應(yīng)的變量區(qū)(賦值);語句iload_1是將變量區(qū)中的值暫存如堆棧中。因?yàn)閕=i++;是先將i的值(0)存入堆棧,然后對(duì)變量區(qū)中的i自加1,這時(shí)i的值的確是1,但是隨后的istore_1又將堆棧的值(0)彈出賦給變量區(qū)的i,所以最后i=0。又因?yàn)閕=++i;是先對(duì)變量區(qū)中的i自加1,然后再將變量區(qū)中i的值(1)存入堆棧,雖然最后執(zhí)行了istore_1,但也只是將堆棧中的值(1)彈出賦給變量區(qū)的i,所以i=++i;的結(jié)果是i=1。

另外:java i++ ++i 中間變量緩存;

PS:http://blog.csdn.net/ffanfanm/article/details/12784489

故而,最佳實(shí)踐一:不要在單個(gè)的表達(dá)式中對(duì)相同的變量賦值超過一次。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 天峻县| 无极县| 罗定市| 利川市| 辽宁省| 西峡县| 兴文县| 杭州市| 同仁县| 尖扎县| 乾安县| 徐闻县| 武隆县| 旌德县| 海南省| 津市市| 贵德县| 蒲城县| 白水县| 南丹县| 乌海市| 景谷| 新邵县| 肇东市| 怀来县| 天等县| 砀山县| 巫山县| 华宁县| 东乌珠穆沁旗| 隆德县| 四子王旗| 乐安县| 衡东县| 青龙| 沁阳市| 香格里拉县| 崇明县| 海口市| 剑川县| 波密县|