我在Java 1.7.0_17中运行的类和Windows下的Jboss 4.2.3GA中有一些代码。代码执行此操作:
Date newNextDate = inBetween(currentDate, nextDate, start);
print("newNextDate=" + newNextDate);
inbetween做了一个相当简单的比较:
private Date inBetween(Date start, Date end, Date test) {
...
Date contains = t.contains(test) ? test : end;
print("returning contains=" + contains);
return contains;
}
确切的实现包含与IMHO无关,因为最终导致java.util.Date被赋值给contains变量。 stdout上的输出是:
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.返回后,收集变量为空
这个世界怎么可能?
最奇怪的是,它只出现在这里,在1.000.000行代码中没有其他地方。
答案 0 :(得分:2)
也许你已经重载了你的inBetween并被调用:
private Date inBetween(long start, Date end, Date test) {
Date result = null;
inBetween(new Date(start), end, test);
return result;
}
或类似的典型事物。一个catch ... return null
。
唯一的其他技术方法是让AOP拦截器执行错误的缓存(memoization?)左右。不可能的。