i 與 i不要傻傻分不清

2022-07-16 01:24:12 字數 1068 閱讀 4810

雖然這倆的區別很簡單,但是真的有很多開發人員在使用的時候不注意,一不小心就釀成大錯

下面我會用乙個深刻的例子來進行講解 i++ 與 ++i 的區別(ps:我不會告訴你這是乙個有六七年開發經驗的人所犯的錯誤的。。。)

事情的經過是這樣子的

某開發人員寫了這樣一行**

如果未獲取到鎖,呼叫自身的方法

其實他想做的是,如果沒有獲取到鎖,睡100ms之後再重試,重試三次失敗

乍一看,這個方法似乎沒有什麼問題,但是稍微有點經驗的開發人員都會發現,times++會先執行後++,那麼也就是說,給 tranceentrymessage 這個方法傳遞進去的值永遠是0;程式就陷入了死迴圈

寫乙個單元測試試一下

呼叫方很簡單:

1

@test

2public

void

test2()

其中test4方法如下

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引數等於你要取的最後乙個字元的位置值加上...