“生存本来就是一种幸运,过去的地球上是如此,现在这个冷酷的宇宙中也到处如此。但不知从什么时候起,人类有了一种幻觉,认为生存成了唾手可得的东西,这就是你们失败的根本原因。” --《三体》智子
弱小和无知不是生存的障碍,傲慢才是。 --《三体》

自增的陷阱

问题来自《编写高质量代码:改善 Java 程序的 151 个建议》。

书中作者提出一个 ++i 的问题,需要读者确认下述一段代码输出结果是多少? 书中给出的答案是 0.

作者详细的介绍了为什么返回值是 0,让读者准确理解表达式的含义。并借此来告诫读者不要掉入自增的陷阱里面了。

public class Counter {
  public static void main(String[] args) {
    int count = 0;
    for (int i = 0; i < 10; i++) {
      count =count++;
    }
    System.out.println("count="+count);
  }
}

多线程并发问题

问题来自《Clean Code》.

书中作者举例说明两个线程并发访问 lastIdUsed 可能出现的情况。当 lastIdUsed 初始值为 93 时,两个线程并发调用下述代码,可能产生的值为 94、95。
读者并且展开讲解多线程并发情况下代码执行的可能顺序及其数量。

public class IdGenerator {
  private int lastIdUsed;

  public int increamentValue() {
    return ++lastIdUsed;
  }
}

问题如此简单为何分享?

在软件开发、测试过程中,需要有扎实的基础知识,以便发现、解决软件开发过程中潜藏很深的 bug。

备注

本文由作者同步发布到知乎


↙↙↙阅读原文可查看相关链接,并与作者交流