Что такое третье логическое состояние в Java?

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


person Bobby    schedule 04.06.2009    source источник
comment
Третье логическое состояние обычно FileNotFound.   -  person Brian    schedule 04.06.2009
comment
@ Брайан, разве это не зависит от того, реализуете ли вы Paula Bean?   -  person Paul Tomblin    schedule 04.06.2009
comment
@Paul: Когда вы не наблюдаете, этого не существует. Квантовая функция рушится только тогда, когда вы открываете дверь :D   -  person talonx    schedule 04.06.2009
comment
@talnox Когда вы не наблюдаете, это облако вероятностей!   -  person Ali Shakiba    schedule 05.05.2011
comment
ссылка на FileNotFound   -  person andyb    schedule 20.03.2014


Ответы (8)


По умолчанию установлено значение false.

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

если вы не используете обернутое логическое значение, который по умолчанию равен нулю. - Судхир.Дж

person Adam Paynter    schedule 04.06.2009
comment
В общем, переменные Java по умолчанию имеют то, что программисты C могли бы назвать ложными значениями, например. 0, ноль, ложь и т. д. - person hbw; 04.06.2009
comment
если вы не используете обернутое логическое значение, которое по умолчанию равно нулю. - person Sudhir Jonathan; 04.06.2009
comment
@sudhir.j абсолютно прав. Я надеюсь, что ответ будет отредактирован, чтобы включить это. - person Ian McLaird; 04.06.2009
comment
Я случайно узнал об этом факте sudhir.j, поэтому я пометил вопрос как примитивный, но я также надеюсь, что ответ будет отредактирован, чтобы включить его на благо других. - person Bobby; 05.06.2009

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

person Yishai    schedule 04.06.2009

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

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

person Trey    schedule 04.06.2009

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

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

См. документ.

person JeffH    schedule 04.06.2009

В JAVA логические типы по умолчанию имеют значение False.

person Matthew Vines    schedule 04.06.2009

К вашему сведению, логические значения по умолчанию равны false, примитивные числа по умолчанию равны 0, 0L, 0f или 0d в зависимости от ситуации, символьные значения по умолчанию равны '\0', ссылки на объекты (например, логические значения) по умолчанию равны нулю.

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

person Peter Lawrey    schedule 05.06.2009

Это ложь

person NinethSense    schedule 04.06.2009

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

boolean isTrue;

System.out.println(isTrue);

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

person ist_lion    schedule 04.06.2009
comment
Да, но если логическое значение является переменной экземпляра, по умолчанию оно равно false, без предупреждения. - person Lawrence Dol; 04.06.2009