i i 與i i的區別

2021-10-07 20:29:53 字數 1224 閱讀 2867

你真的清楚 i = i++和 i = ++i 的區別嗎?

寫在前面:前些天看完了jvm的記憶體結構,自以為自己是懂了,心裡想想不就是分執行緒共享和執行緒私有嘛,然後又怎麼怎麼分怎麼怎麼的嘛…

直到遇到了這道題目。說句實話,曾經自己做這種運算題目,完全是靠腦子空想,然後拿上筆顫抖的寫下乙個自己都不知道正不正確的答案。不過過了今天,我終於能確定它的答案了。

為此,我也專門寫一篇部落格,記錄我的學習!!!

1、題目

package pers.mobian.questions01;

public class test01

}你能肯定並且準確的說出你的答案嗎?

2、分析

在做這道題時我們的腦中要有對應的jvm記憶體結構。其中乙個方法對應乙個棧幀

此題目我們只需要用到棧幀裡面的區域性變數表和運算元棧

2.1、第一步

只是乙個簡單的賦值操作

2.2、第二步

結果:i還是等於1

2.3、第三步

結果:i在區域性變數表中變成了2,運算元棧中的 i 值為1,並且將 i 的值返回給 j,即此條語句以後,i = 2,j = 1

2.4、第四步

結果:區域性變數表中的i = 4,k = 11

2.5、結果

按理說根據上面的分析過程,再來分析 i = ++i,就很簡單了。

我們的 i 變數先在區域性變數表中進行自增,然後再將 i 進棧,然後再把棧中的資料返回給我們的變數 i 。

public class test02

}

打家劫舍II

你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝...

打家劫舍 II

相較於打家劫舍,算是乙個公升級版。既然是打家劫舍的公升級版,那我們就先找與原版之間的聯絡。做過打家劫舍之後我們知道狀態轉移方程是dp i max dp i 1 dp i 2 nums i 1 然後我們再來看這道題,由相鄰的一家變成了相鄰的兩家。那麼就相當於把原來的一條直線首尾相連變成了乙個環,這句話...

打家劫舍II

你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝...