Хорошо известно, что GC иногда перемещают объекты в памяти. И, насколько мне известно, до тех пор, пока все ссылки обновляются, когда объект перемещается (перед вызовом какого-либо кода пользователя), это должно быть абсолютно безопасным.
Однако я заметил, что кто-то упоминает, что сравнение ссылок может быть небезопасным из-за того, что объект перемещается GC в середине сравнительного сравнения, так что сравнение может потерпеть неудачу, даже если обе ссылки должны ссылаться на один и тот же объект?
т.е. существует ли ситуация, при которой следующий код не будет печатать "истина"?
Foo foo = new Foo();
Foo bar = foo;
if(foo == bar) {
System.out.println("true");
}
Я пробовал использовать эту игру, и отсутствие надежных результатов заставляет меня поверить, что человек, который заявил об этом, был не прав, но я нашел множество сообщений на форуме (как этот), который, казалось, указывал на то, что он был прав. Но в этой теме также есть люди, говорящие, что это не должно быть.