为了账号安全,请及时绑定邮箱和手机立即绑定

请问这是编码习惯还是另有它因?

请问这是编码习惯还是另有它因?

杨__羊羊 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 关注
  • 816 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号