Почему 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
поле.