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

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;
}

我的想法:

  1. 单纯就是用m比用mark来得更简洁
  2. 防止mark的值在返回之前被修改了(注:该类不是thread safe的
  3. 这不是个问题

清楚的朋友麻烦给下意见,谢谢啦

阅读 1.2k
1 个回答

个人倾向于第2点。

不是thread safe只是说不保证线程安全,但是为安全性做一点点额外的努力还是有好处的。

比如能够改善内部状态的一致性:虽然无法保证mark和position的完全一致,但至少可以做到在调用reset时的mark和最终的position是一致的,不至于出现调用时的mark大于等于0,但最终position却变成小于0这种严重不一致的情况。

这种一致性的改善虽然不能够让程序能够在多线程下面跑,但却有以下好处:

  1. 有利于调试。就像前面说的,position始终是满足非负约束的,在任何情况下你都不会收到一个关于position的range exception。否则,position的这种约束将无法保证,当你reset时未报错,但未来某个时刻调用了某个用到position的方法时却收到了一个range exception错误,那时候要找到是哪个地方改变了position都要花费一番功夫了
  2. 可以提高多线程下的安全性。甚至在很多竞争不激烈的情况下,即使误用了多线程,也有可能不会出错。这就像一个简单的密码行李箱上的密码锁,它是不安全的,如果你的行李箱被偷了,小偷可以有一千种方法打开箱子;但是它又是相对安全的,至少没人可以在你短暂离开或小睡一会的时候偷你东西。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题