我在 Windows 下运行 Java 1.7.0_17 和 Jboss 4.2.3GA 的类中有一点代码。代码这样做:
Date newNextDate = inBetween(currentDate, nextDate, start);
print("newNextDate=" + newNextDate);
中间进行了相当简单的比较:
private Date inBetween(Date start, Date end, Date test) {
...
Date contains = t.contains(test) ? test : end;
print("returning contains=" + contains);
return contains;
}
确切的实现 contains 不相关恕我直言,因为最终导致 java.util.Date 被分配给 contains 变量。标准输出上的输出是:
16:44:56,153 INFO returning contains=Tue Apr 30 23:59:59 CEST 2013
16:44:56,153 INFO newNextDate=null
这就是谜团开始的地方: 1. 就在 return 语句之前, contains 变量有一个值 2. 返回之后收集变量为 null
这怎么可能?
- 是的,我们已经检查过这个 inbetween 方法是否被调用,否则它不会打印输出。
- 不,没有同名的实例变量。但即便如此,两者之间也没有发生任何事情。
- 不,我们无法调试该过程,因为它只发生在我们的生产服务器上,并且在开发中不可重现。
最奇怪的是,它只出现在这里,没有出现在 1.000.000 行代码中。