亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問這是編碼習慣還是另有它因?

請問這是編碼習慣還是另有它因?

楊__羊羊 2019-02-04 00:13:21
int mark = value1;int position = value2;public classType reset() {    int m = mark;    if (m < 0)        throw new Exception();     position = m;    return this; }疑問:為什么將mark賦值給新的臨時變量,而不是像下面這樣:int mark = value1;int position = value2;public classType reset() {    if (mark < 0)        throw new Exception();     position = mark;    return this; }我的想法:單純就是用m比用mark來得更簡潔防止mark的值在返回之前被修改了(注:該類不是thread safe的這不是個問題清楚的朋友麻煩給下意見,謝謝啦
查看完整描述

1 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊


個人傾向于第2點。

不是thread safe只是說不保證線程安全,但是為安全性做一點點額外的努力還是有好處的。

比如能夠改善內部狀態的一致性:雖然無法保證mark和position的完全一致,但至少可以做到在調用reset時的mark和最終的position是一致的,不至于出現調用時的mark大于等于0,但最終position卻變成小于0這種嚴重不一致的情況。

這種一致性的改善雖然不能夠讓程序能夠在多線程下面跑,但卻有以下好處:

  1. 有利于調試。就像前面說的,position始終是滿足非負約束的,在任何情況下你都不會收到一個關于position的range exception。否則,position的這種約束將無法保證,當你reset時未報錯,但未來某個時刻調用了某個用到position的方法時卻收到了一個range exception錯誤,那時候要找到是哪個地方改變了position都要花費一番功夫了

  2. 可以提高多線程下的安全性。甚至在很多競爭不激烈的情況下,即使誤用了多線程,也有可能不會出錯。這就像一個簡單的密碼行李箱上的密碼鎖,它是不安全的,如果你的行李箱被偷了,小偷可以有一千種方法打開箱子;但是它又是相對安全的,至少沒人可以在你短暫離開或小睡一會的時候偷你東西。


查看完整回答
反對 回復 2019-02-04
  • 1 回答
  • 0 關注
  • 812 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號