Почему булевская переменная в Java берет только TRUE или FALSE? Почему не 1 или 0 также?

Есть ли любая причина, почему булевские переменные Java берут только true или false почему нет 1 или 0 также?

44
задан Charles 13 March 2012 в 18:52
поделиться

5 ответов

Java, в отличие от таких языков, как C и C++, рассматривает boolean как совершенно отдельный тип данных, который имеет 2 различных значения: true и false. Значения 1 и 0 имеют тип int и неявно преобразуются в boolean.

47
ответ дан 26 November 2019 в 21:49
поделиться

Специфичность в этом вопросе держит вас подальше от всей TRUE в VB -1, а в других лангах правда только NON ZERO. Сохранение булевого поля как true или false удерживает java вне этого аргумента.

.
3
ответ дан 26 November 2019 в 21:49
поделиться
[

] В смежном примечании: компилятор java использует []int[] для представления []boolean[], так как JVM имеет ограниченную поддержку булевого типа.см. []Раздел 3.3.4 Булевый тип[]. [

] [

]В JVM, целое число представляет []false[], а любое ненулевое число представляет []true[]. (Источник: []Inside Java Virtual Machine[] by Bill Venners)[

]
3
ответ дан 26 November 2019 в 21:49
поделиться

Потому что булеан имеет два значения: true или false. Обратите внимание, что это не строки, а реальные булевы литералы.

1 и 0 являются целыми числами, и нет причин путать их, делая их "альтернативными true" и "альтернативными false" (или наоборот, для тех, что используются для кодов выхода из Unix?). При сильном наборе на Java должно быть только два примитивных булевых значения.

EDIT: Обратите внимание, что вы можете легко написать функцию преобразования, если хотите:

public static boolean intToBool(int input)
{
   if (input < 0 || input > 1)
   {
      throw new IllegalArgumentException("input must be 0 or 1");
   }

   // Note we designate 1 as true and 0 as false though some may disagree
   return input == 1;
}

Хотя я бы не рекомендовал этого. Обратите внимание, что вы не можете гарантировать, что переменная int на самом деле равна 0 или 1; и нет 100% очевидной семантики того, что означает истина. С другой стороны, переменная boolean - это всегда либо true, либо false и очевидно, какая из них означает true. :-)

Поэтому вместо функции преобразования привыкайте использовать boolean переменные для всего, что представляет собой понятие true/false. Если нужно использовать какую-то примитивную текстовую строку (например, для хранения в плоском файле), то "true" и "false" гораздо понятнее по смыслу, и их можно сразу же превратить в boolean с помощью библиотечного метода Boolean.valueOf.

29
ответ дан 26 November 2019 в 21:49
поделиться

Потому что люди, создавшие Java, хотели, чтобы булевы означали однозначно правду или ложь, а не 1 или 0.

Между языками нет единого мнения о том, как 1 и 0 превращаются в булевы. C использует любое ненулевое значение для обозначения true и 0 для обозначения false, но некоторые UNIX оболочки делают обратное. Использование ints ослабляет проверку типов, так как компилятор не может защититься от случаев, когда передаваемое значение int не является тем, что должно использоваться в булевом контексте.

17
ответ дан 26 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: