Я бы очень хотел предоставить минимальный рабочий пример для этого вопроса, но мне не удалось его создать. Поэтому я просто опишу, что происходит, и надеюсь, что кто-то может помочь.Невозможно установить переменную-член в нуль
Где-то в моем коде, у меня есть следующие строки: (. Этот код является результатом большого количества отладки я уже сделано, чтобы найти причину моей проблемы)
long i = 0;
while (this.someField != null) {
this.someField = null;
i++;
}
long j = i;
Этот код развертывается на сервере приложений WebLogic. У меня есть точка останова, установленная перед циклом while
. Я отлаживаю код удаленно с помощью IntelliJ.
Когда код попадает в точку останова, я выполняю его шаг за шагом. Код просто продолжает цикл через цикл while
, но someField
никогда не становится null
. Поэтому я установил вторую точку останова на линии после цикла и ударил continue. Код немедленно выходит из цикла и останавливается в этой строке. Я могу сказать, что больше нет циклов цикла, потому что после этого я проверяю i
. Однако this.someField
еще не является нулевым. Я пробовал это несколько раз, поэтому я совершенно уверен, что причина, по которой код продолжает выполнять цикл, заключается в том, что я отлаживаю его.
Я понятия не имею, как отладить эту проблему. Мои наблюдения просто не имеют никакого смысла (если я не применяю квантовую механику). Что может вызвать такое поведение? Это ошибка в моей JVM? Ошибка в отладчике? Что-то другое?
Edit:
Поле объявлен как это:
private Vector<KeyValuePair> someField = null;
Это частная, и я заверил, что это не изменяется другим потоком путем установки точек останова на все методы, которые MANGLE с ним.
Любой случайный параллелизм является частью тайны? Можете ли вы показать определение 'someField'? – Thomas
На сервере приложений существуют другие потоки, но все они работают в разных вариантах развертывания и не могут помешать этому объекту. – flyx
Думаю, вам нужно попытаться создать минимальный пример. На данный момент ваш вопрос невозможно ответить, и непонятно, зачем вам нужен цикл while, чтобы задать поле «null». –