雖然這倆的區別很簡單,但是真的有很多開發人員在使用的時候不注意,一不小心就釀成大錯
下面我會用乙個深刻的例子來進行講解 i++ 與 ++i 的區別(ps:我不會告訴你這是乙個有六七年開發經驗的人所犯的錯誤的。。。)
事情的經過是這樣子的
某開發人員寫了這樣一行**
如果未獲取到鎖,呼叫自身的方法
其實他想做的是,如果沒有獲取到鎖,睡100ms之後再重試,重試三次失敗
乍一看,這個方法似乎沒有什麼問題,但是稍微有點經驗的開發人員都會發現,times++會先執行後++,那麼也就是說,給 tranceentrymessage 這個方法傳遞進去的值永遠是0;程式就陷入了死迴圈
寫乙個單元測試試一下
呼叫方很簡單:
1其中test4方法如下@test
2public
void
test2()
public我們會發現,程式永遠沒有辦法執行到第二個void
test4(integer i)
system.out.println("i = " +i);
if (i == 3)
test4(i++);
system.out.println("i = " +i);
}
system.out.println("i = " +i);這行**
看一下debug執行結果
已經執行4次了,i 列印出來的值依然是 0;
那麼要解決這個問題怎麼辦呢
很簡單,把 times++ 換成 ++times 就可以了
程式完美執行
MVP, MVC, MVVM, 傻傻分不清楚
最近 mvc model view controller 和 mvvm model view viewmodel 在微軟圈成為顯學,asp.net mvc 和 wpf 的 prism mvvm framework 功不可沒,mvc 和 mvvm 在概念上都是基於分層的,將呈現 presentatio...
這幾個的用法傻傻分不清
每每看到這幾個,就矇圈了,這都是啥呀?既然這麼容易混淆,我還是來做個小筆記吧,以便日後查閱 1.slice 陣列 用法 array.slice start,end 解釋 該方法是對陣列進行部分擷取,並返回乙個陣列副本 引數start是擷取的開始陣列索引,end引數等於你要取的最後乙個字元的位置值加上...
這幾個的用法傻傻分不清
每每看到這幾個,就矇圈了,這都是啥呀?既然這麼容易混淆,我還是來做個小筆記吧,以便日後查閱 1.slice 陣列 用法 array.slice start,end 解釋 該方法是對陣列進行部分擷取,並返回乙個陣列副本 引數start是擷取的開始陣列索引,end引數等於你要取的最後乙個字元的位置值加上...