<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>

          【118期】面試官:你真的清楚 i = i++和 i = ++i 的區(qū)別嗎?

          共 1433字,需瀏覽 3分鐘

           ·

          2021-01-16 00:14

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?
          關(guān)注


          閱讀本文大概需要 2 分鐘。

          來自:blog.csdn.net/qq_44377709/article/details/106643703

          寫在前面:前些天看完了JVM的內(nèi)存結(jié)構(gòu),自以為自己是懂了,心里想想不就是分線程共享和線程私有嘛,然后又怎么怎么分怎么怎么的嘛…
          直到遇到了這道題目。說句實話,曾經(jīng)自己做這種運算題目,完全是靠腦子空想,然后拿上筆顫抖的寫下一個自己都不知道正不正確的答案。不過過了今天,我終于能確定它的答案了。
          為此,我也專門寫一篇博客,記錄我的學(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、分析

          在做這道題時我們的腦中要有對應(yīng)的JVM內(nèi)存結(jié)構(gòu)。其中一個方法對應(yīng)一個棧幀
          此題目我們只需要用到棧幀里面的局部變量表和操作數(shù)棧

          2.1、第一步

          int i = 1
          只是一個簡單的賦值操作

          2.2、第二步

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

          2.3、第三步

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

          2.4、第四步

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

          2.5、結(jié)果

          3、i = ++i

          按理說根據(jù)上面的分析過程,再來分析?i = ++i,就很簡單了。
          我們的 i 變量先在局部變量表中進行自增,然后再將 i 進棧,然后再把棧中的數(shù)據(jù)返回給我們的變量 i 。
          public?class?test02?{
          ????public?static?void?main(String[]?args)?{
          ????????int?i?=?1;
          ????????i?=?++i;
          ????????System.out.println(i);?//?結(jié)果:i = 2
          ????}
          }
          最后的最后:本文的思考過程和計算推導(dǎo)僅針對Java語言。

          推薦閱讀:

          【117期】面試官:熟悉JVM嗎?為什么新生代內(nèi)存需要有兩個Survivor區(qū)?

          【116期】MySQL索引優(yōu)缺點、何時需要/不需要創(chuàng)建索引、索引及sql語句的優(yōu)化

          【115期】TCP協(xié)議面試10連問,總會用得到,建議收藏~

          5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內(nèi)回復(fù)「2048」,即可免費獲取?。?/span>

          微信掃描二維碼,關(guān)注我的公眾號

          朕已閱?

          瀏覽 47
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  男人天堂网www | 97青娱乐在线观看视频网站 | 日韩深喉视频 | 欧美顶级A一片视频 | 激情无套内射无码视频 |