Что такое хэш-код AtomicBoolean?

Я не смог найти никакой информации в официальных документах. я знаю это Boolean.hashCode(boolean b) возвращает два простых числа 1231 и 1237 для истинного и ложного. Я надеюсь на аналогичную реализацию в AtomicBoolean, Но в декомпилированном файле класса это выглядит как public native int hashCode(); из Object - это значит, что он вернет ячейку памяти?

4 ответа

Решение

Резюме пакета говорит, почему hashCode не переопределяется для AtomicBoolean:

Атомарные классы не являются заменой общего назначения для java.lang.Integer и связанных классов. Они не определяют методы, такие как equals, hashCode а также compareTo, (Поскольку ожидается, что атомные переменные будут мутированными, они являются плохим выбором для ключей хеш-таблицы.)

Значит ли это, что он вернет ячейку памяти?

Это зависит от того, какую JVM вы используете, но да, обычно это происходит из адреса памяти. Другие JVM могут просто использовать случайное число.

AtomicBoolean не переопределяет hashCode (или равно), поэтому он наследует поведение объекта по умолчанию.

Это действительно имеет большой смысл. Основной вариант использования hashCode - позволить объекту быть ключом хэш-карты, но опасно изменять ключи, когда они находятся на карте. Поскольку основным атрибутом AtomicBoolean является его изменчивость, это делает его плохим кандидатом на ключ HashMap.

Другими словами: если вам нужно, чтобы он был ключом HashMap, вы не должны изменять его, и если вы не собираетесь изменять его, вам не следует использовать AtomicBoolean.

AtomicBoolean не отменяет hashCode() (или же equals(Object)в этом отношении) метод. Он использует реализацию по умолчанию от java.lang.Object, Хотя это не указано в JLS, эта реализация обычно просто возвращает внутренний адрес объекта, представленного в виде int,

java.util.concurrent.atomic.AtomicBoolean использует hashode метода объекта, который не переопределяется в классе. поэтому он использует дефолтный hascode класса объекта.

Другие вопросы по тегам