Есть ли любая причина, почему булевские переменные Java берут только true
или false
почему нет 1
или 0
также?
Java, в отличие от таких языков, как C и C++, рассматривает boolean
как совершенно отдельный тип данных, который имеет 2 различных значения: true и false. Значения 1 и 0 имеют тип int и неявно преобразуются в boolean
.
Специфичность в этом вопросе держит вас подальше от всей TRUE в VB -1, а в других лангах правда только NON ZERO. Сохранение булевого поля как true или false удерживает java вне этого аргумента.
.] В смежном примечании: компилятор java использует []int[] для представления []boolean[], так как JVM имеет ограниченную поддержку булевого типа.см. []Раздел 3.3.4 Булевый тип[]. [
] []В JVM, целое число представляет []false[], а любое ненулевое число представляет []true[]. (Источник: []Inside Java Virtual Machine[] by Bill Venners)[
] Потому что булеан имеет два значения: 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.
Потому что люди, создавшие Java, хотели, чтобы булевы означали однозначно правду или ложь, а не 1 или 0.
Между языками нет единого мнения о том, как 1 и 0 превращаются в булевы. C использует любое ненулевое значение для обозначения true и 0 для обозначения false, но некоторые UNIX оболочки делают обратное. Использование ints ослабляет проверку типов, так как компилятор не может защититься от случаев, когда передаваемое значение int не является тем, что должно использоваться в булевом контексте.