无法将成员变量设置为 null

Cannot set member variable to null

我真的很想为这个问题提供一个最小的工作示例,但我没有成功创建一个。所以我只会描述正在发生的事情,并希望有人能提供帮助。

在我的代码中某处,我有这些行:

long i = 0;
while (this.someField != null) {
    this.someField = null;
    i++;
}
long j = i;

(此代码是我为查找问题原因而进行的大量调试的结果。)

此代码部署在 WebLogic 应用程序服务器上。我在 while 循环之前设置了一个断点。我使用 IntelliJ 远程调试代码。

当代码遇到断点时,我一步步执行。代码一直在 while 循环中循环,但 someField 永远不会变成 null。所以我在循环后的行设置了第二个断点,然后点击 continue。代码立即退出循环并停在这一行。我可以看出没有更多的循环执行,因为我随后检查了 i 。但是,this.someField still 不为空。我试了很多次,所以我很确定代码一直执行循环的原因是我在调试它。

我不知道如何调试这个问题。我的观察没有任何意义(除非我应用量子力学)。什么会导致这种行为?这是我的 JVM 中的错误吗?调试器中的错误?还有别的吗?

编辑:

字段声明如下:

 private Vector<KeyValuePair> someField = null;

它是私有的,我通过在所有与它混淆的方法上设置断点来确保它不会被另一个线程更改。

这似乎是 IntelliJ 调试器的问题。调试器在调试时设置值,控制流根据这个修改而改变。当我改用 Eclipse 调试器时,问题就消失了。