Почему Class AtomicBoolean инициализируется не истинным, а ложным по умолчанию конструктором?

java source code:

static {
  try {
    valueOffset = unsafe.objectFieldOffset
        (AtomicBoolean.class.getDeclaredField("value"));
  } catch (Exception ex) { throw new Error(ex); }
}

конструктор по умолчанию ничего не делает:

public AtomicBoolean() {
}

Переменная 'valueOffset' означает местоположение смещения в памяти? Я не понимаю, почему он инициализирован как "false" по умолчанию конструктор. Как я могу это понять?

1 ответ

Поскольку в конструкторе по умолчанию значение не задано, начальное значение является инициализированным значением value Поле - это целое число, без явного значения, поэтому его значение по умолчанию равно нулю.

Исходный код:

private volatile int value;

/**
 * Creates a new {@code AtomicBoolean} with the given initial value.
 *
 * @param initialValue the initial value
 */
public AtomicBoolean(boolean initialValue) {
    value = initialValue ? 1 : 0;
}

/**
 * Creates a new {@code AtomicBoolean} with initial value {@code false}.
 */
public AtomicBoolean() {
}

Установка его в false согласуется с неинициализированным boolean поле.

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