2009-06-04 4 views
26

Хотя я знаю, что по определению булевое состоит только из двух состояний: true или false. Мне было интересно, какое значение имеет значение boolean, прежде чем оно будет инициализировано одним из этих состояний.Что такое третье булево состояние в java?

+48

Третьим булевым состоянием обычно является FileNotFound. – Brian

+6

@Brian, разве это не зависит от того, реализуете ли вы Паулу Бин? –

+11

@Paul: Когда вы не наблюдаете, его не существует. Квантовая функция разрушается только при открытии двери: D – talonx

ответ

69

It defaults to false.

Edit: По многочисленным просьбам:

, если вы не используете обернутый Boolean, который по умолчанию нулевое значение. - sudhir.j

+3

В общем, переменные Java по умолчанию используют то, что программисты C могут вызывать значения «falsey» - например. 0, null, false и т. Д. – hbw

+11

, если вы не используете завернутый Boolean, который по умолчанию имеет значение null. –

+0

@ sudhir.j совершенно правый. Я надеюсь, что ответ будет отредактирован, чтобы включить это. –

16

Если это локальная переменная, это ошибка компилятора, чтобы ссылаться на нее до ее инициализации. Если это поле, оно инициализируется значением false.

+0

то же самое относится к содержимому массива –

1

В JAVA булевых типах по умолчанию используется значение False.

2

Третьего государства нет. Как сказал @Yishai, если вы не присвоите значение, булевским полям по умолчанию будет false. Локальные переменные должны быть назначены перед использованием:

Доступ неинициализированная местной переменной приведет к компиляции ошибки

См the doc.

0

Если вы что-то вроде

boolean isTrue; 

System.out.println(isTrue); 

Вы должны получить компиляции ошибки времени, потому что булево не был инициализирован. По умолчанию при попытке инициализировать это будет установлено значение false;

+2

Да, но если логическая переменная является переменной экземпляра, она по умолчанию имеет значение false, без предупреждения. –

9
public class NewMain { 

    boolean foo; 
    Boolean bar; 

    public static void main(String[] args) { 
     NewMain obj = new NewMain(); 

     obj.whatBoolean(); 
    } 

    public void whatBoolean() { 
     System.out.println(foo); 
     System.out.println(bar); 
    } 
} 

выходов

false 
null 

Я знаю, что это было более философский вопросом, но благодаря Autoboxing вы можете использовать Java в качестве почти истинно языка OO (я ненавижу примитивные типы ... теперь только если он будет работать и наоборот). Однако он изменяет поведение при использовании объекта (для лучшего ИМО).

1

FYI, boolean defaults to false, примитивные номера по умолчанию равны 0, 0L, 0f или 0d соответственно, char по умолчанию - '\ 0', ссылки на объекты (такие как Boolean) по умолчанию равны null.

Это также относится к содержимому массивов. (Общая информация о том, что массив объектов изначально заполнен нулевыми значениями)

Смежные вопросы