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