<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          終于弄明白 i = i++和 i = ++i 了

          共 1026字,需瀏覽 3分鐘

           ·

          2020-06-25 23:23

          11283fbc98c57a4af2cf28c84215b70e.webp

          來源:https://urlify.cn/Abyuyy


          寫在前面:前些天看完了JVM的內(nèi)存結(jié)構(gòu),自以為自己是懂了,心里想想不就是分線程共享和線程私有嘛,然后又怎么怎么分怎么怎么的嘛…


          直到遇到了這道題目。說句實(shí)話,曾經(jīng)自己做這種運(yùn)算題目,完全是靠腦子空想,然后拿上筆顫抖的寫下一個(gè)自己都不知道正不正確的答案。不過過了今天,我終于能確定它的答案了。


          為此,我也專門寫一篇博客,記錄我的學(xué)習(xí)!??!

          1、題目

          package pers.mobian.questions01;
          public class test01 { public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println("i="+i); System.out.println("j="+j); System.out.println("k="+k); }}

          你能肯定并且準(zhǔn)確的說出你的答案嗎?


          2、分析

          在做這道題時(shí)我們的腦中要有對應(yīng)的JVM內(nèi)存結(jié)構(gòu)。其中一個(gè)方法對應(yīng)一個(gè)棧幀

          7aa0a2fd5b0784cdb99981318550fdc2.webp

          此題目我們只需要用到棧幀里面的局部變量表和操作數(shù)棧


          2.1、第一步

          int i = 1

          8bba4e461876521e67e2e516c1511a52.webp

          只是一個(gè)簡單的賦值操作


          2.2、第二步

          i = i++

          197567e06fae70159a5209d9991446cd.webp

          結(jié)果:i還是等于1


          2.3、第三步

          int j = i++

          ce83a3c610689c5fab021d754bd6f0a6.webp

          結(jié)果:i在局部變量表中變成了2,操作數(shù)棧中的 i 值為1,并且將 i 的值返回給 j,即此條語句以后,i = 2,j = 1


          2.4、第四步

          int k = i + ++i * i++

          53f80d4225550b8f0005727fec9b76ed.webp

          結(jié)果:局部變量表中的i = 4,k = 11


          2.5、結(jié)果

          01bebba550ef229c109aa33ad0f0a675.webp

          3、i = ++i

          按理說根據(jù)上面的分析過程,再來分析 i = ++i,就很簡單了。
          我們的 i 變量先在局部變量表中進(jìn)行自增,然后再將 i 進(jìn)棧,然后再把棧中的數(shù)據(jù)返回給我們的變量 i 。

          public class test02 {    public static void main(String[] args) {        int i = 1;        i = ++i;        System.out.println(i); // 結(jié)果:i = 2    }}


          最后的最后:本文的思考過程和計(jì)算推導(dǎo)僅針對Java語言

          87619a4b16e28e5d69e10f053f612119.webp
          瀏覽 47
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆精品无码久久久 | 精品视频你懂的 | 黄页网站在线播放 | 婷婷激情五月天丁香 | 女18人毛片 |