不可能的Java方法调用行为

tbe*_*not 6 java

我在Java 1.7.0_17和Windows下的Jboss 4.2.3GA中运行的类中有一些代码.代码执行此操作:

Date newNextDate = inBetween(currentDate, nextDate, start);
print("newNextDate=" + newNextDate);
Run Code Online (Sandbox Code Playgroud)

中间做了一个相当简单的比较:

private Date inBetween(Date start, Date end, Date test) {
    ...
    Date contains = t.contains(test) ? test : end;
    print("returning contains=" + contains);
    return contains;
}
Run Code Online (Sandbox Code Playgroud)

确切的实现包含与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
Run Code Online (Sandbox Code Playgroud)

这就是神秘开始的地方:1.在return语句之前,contains变量的值为2.返回后,收集变量为null

这有可能在世界上如何?

  • 是的,我们已经检查了是否正好调用了这个inbetween方法,否则就不会打印输出.
  • 不,没有具有相同名称的实例变量.但即便如此,两者之间也没有任何事情发生.
  • 不,我们无法调试该过程,因为它只发生在我们的生产服务器上,并且在开发时不可重现.

最奇怪的是,它只出现在这里,在1.000.000行代码中没有其他地方.

Joo*_*gen 2

也许你已经超载了 inBetween 并被调用:

private Date inBetween(long start, Date end, Date test) {
     Date result = null;
     inBetween(new Date(start), end, test);
     return result;
}
Run Code Online (Sandbox Code Playgroud)

或者类似典型的东西。A catch ... return null

唯一的其他技术方法是让 AOP 拦截器执行错误的缓存(记忆?)等等。不太可能。