Java陷阱

問(wèn):下面程序的運(yùn)行結(jié)果是什么棒假?

int count =0;

for(int i=0; i<100; i++) {

? ? count = count++;

}

System.out.println("count=" + count);

答:運(yùn)行結(jié)果是 count = 0溯职。

首先 count++ 是一個(gè)有返回值的表達(dá)式,返回值是 count 自加前的值帽哑,Java 對(duì)自加處理的流程是先把 count 的值(不是引用)拷貝到一個(gè)臨時(shí)變量區(qū)谜酒,然后對(duì) count 變量加1,接著返回臨時(shí)變量區(qū)的值妻枕。

所以上面代碼塊中第一次循環(huán)的執(zhí)行步驟是 JVM 把 count 值(0)拷貝到臨時(shí)變量區(qū)僻族,然后 count 值加 1,這時(shí) count 的值是 1屡谐,接著返回臨時(shí)變量區(qū)的值(值是 0)述么,最后返回值賦值給 count,此時(shí) count 值被重置成 0愕掏;所以上面代碼語(yǔ)句 count = count++; 可以按照如下代碼來(lái)理解:

int autoAdd(int count) {?

? ? int temp = count;

? ? count = count + 1;?

? ? return temp;

}

所以第一次循環(huán)后 count 的值還是 0度秘,其他 99 次的循環(huán)也是一樣的,最終導(dǎo)致 count 的值始終沒(méi)有改變饵撑,仍然保持著最初的狀態(tài)剑梳;如果想要打印結(jié)果為 100 則需要修改 count = count++; 語(yǔ)句為 count++; 即可。因此對(duì)于 ++/-- 運(yùn)算在 java 中一定要警惕這個(gè)陷阱(-- 運(yùn)算符也一樣存在這個(gè)問(wèn)題)滑潘,不過(guò)這個(gè)問(wèn)題在不同的語(yǔ)言環(huán)境中的實(shí)現(xiàn)是不同的垢乙,在 C++ 中 count = count++; 與 count++ 是等效的,而在 java 等語(yǔ)言中 count = count++; 與 count++ 是不等效的语卤,區(qū)別如這道題追逮。

Java

問(wèn):Java 或者 Android 開(kāi)發(fā)中可以通過(guò)哪些方式來(lái)保證并發(fā)安全的自增自減操作蓖租?

答:java 默認(rèn)的自增自減運(yùn)算符是非并發(fā)安全的,要想實(shí)現(xiàn)并發(fā)安全的自增自減操作可以通過(guò)如下幾種方式實(shí)現(xiàn)羊壹。

通過(guò) synchronized 代碼塊或者方法來(lái)保證自增自減并發(fā)安全蓖宦。

通過(guò)主動(dòng)使用 Lock 鎖來(lái)保證自增自減并發(fā)安全。

通過(guò) JDK 提供的 AtomicInteger 類來(lái)直接保證自增自減并發(fā)安全油猫。

上面幾種做法中最推薦直接使用 AtomicInteger 的方式稠茂,因?yàn)槠湎鄬?duì)于其他幾種方式封裝性非常便捷,此外其實(shí)現(xiàn)基于 volatile 對(duì)象的 CAS 操作來(lái)保證并發(fā)安全情妖,算是一種相對(duì)高效的方式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睬关,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子毡证,更是在濱河造成了極大的恐慌电爹,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件料睛,死亡現(xiàn)場(chǎng)離奇詭異丐箩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)恤煞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門屎勘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人居扒,你說(shuō)我怎么就攤上這事概漱。” “怎么了喜喂?”我有些...
    開(kāi)封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瓤摧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我玉吁,道長(zhǎng)照弥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任诈茧,我火速辦了婚禮产喉,結(jié)果婚禮上捂掰,老公的妹妹穿的比我還像新娘敢会。我一直安慰自己,他們只是感情好这嚣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鸥昏。 她就那樣靜靜地躺著,像睡著了一般姐帚。 火紅的嫁衣襯著肌膚如雪吏垮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音膳汪,去河邊找鬼唯蝶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛遗嗽,可吹牛的內(nèi)容都是我干的粘我。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼痹换,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼征字!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起娇豫,我...
    開(kāi)封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤匙姜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后冯痢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氮昧,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年浦楣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郭计。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椒振,死狀恐怖昭伸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澎迎,我是刑警寧澤庐杨,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站夹供,受9級(jí)特大地震影響灵份,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哮洽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一填渠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸟辅,春花似錦氛什、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至再层,卻和暖如春贸铜,著一層夾襖步出監(jiān)牢的瞬間堡纬,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蒿秦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烤镐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓棍鳖,卻偏偏與公主長(zhǎng)得像职车,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹊杖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)悴灵。 張土汪:刷leetcod...
    土汪閱讀 12,744評(píng)論 0 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法骂蓖,內(nèi)部類的語(yǔ)法积瞒,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法登下,線程的語(yǔ)...
    子非魚_t_閱讀 31,631評(píng)論 18 399
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理茫孔,服務(wù)發(fā)現(xiàn),斷路器被芳,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 文 / 平生心事 在《紅樓夢(mèng)》里缰贝,男人們被曹公排著隊(duì)抖落,其中描寫賈璉好色的片段最多。 賈璉,一個(gè)比較典型的花花公...
    平生心事閱讀 1,444評(píng)論 0 4
  • 2月的最后一天 我一直都在较木。 今日推薦: 林俊杰,從一開(kāi)始的《江南》赞弥,到后來(lái)的《編號(hào)89757》,他的聲音就很有辨...
    小鹿愛(ài)生活筆記閱讀 318評(píng)論 1 1