Есть ли причина, по которой Java-булевы принимают только true
или false
, почему не 1
или 0
также?
Почему логическое значение в Java принимает только true или false? Почему бы не 1 или 0?
Ответ 1
Java, в отличие от языков, таких как C и С++, рассматривает boolean
как полностью отдельный тип данных, который имеет 2 различных значения: true и false. Значения 1 и 0 имеют тип int и неявно конвертируются в boolean
.
Ответ 2
Потому что boolean имеет два значения: true
или false
. Обратите внимание, что это не строки, а фактические логические литералы.
1 и 0 являются целыми числами, и нет причин путать вещи, делая их "альтернативными истинами" и "альтернативными ложными" (или наоборот для тех, которые используются для кодов выхода 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
переменные для всего, что представляет собой истинную/ложную концепцию. Если вы должны использовать какую-то примитивную текстовую строку (например, для хранения в плоском файле), "истина" и "ложь" гораздо понятны по своему смыслу и могут быть немедленно превращены в логическое значение методом библиотеки Boolean.valueOf.
Ответ 3
Поскольку люди, создавшие Java, хотели, чтобы логическое значение означало однозначно true или false, а не 1 или 0.
В языках нет единого мнения о том, как 1 и 0 конвертировать в логические. C использует 1 для обозначения true и 0 для обозначения false, но некоторые оболочки UNIX выполняют обратное. Используя ints ослабляет проверку типов, может быть передано целочисленное значение, кроме 1 или 0, и компилятор не смог бы защитить его.
Ответ 4
Одна вещь, о которой не говорили другие ответы, заключается в том, что одно преимущество не рассматривать целые числа как значения истинности заключается в том, что он избегает этого синдрома ошибок C/С++:
int i = 0;
if (i = 1) {
print("the sky is falling!\n");
}
В C/С++ ошибочное использование =
, а не ==
заставляет условие неожиданно оценивать значение "true" и обновлять i
как случайный побочный эффект.
В Java это ошибка компиляции, потому что значение атрибута i = 1
имеет тип int
, а в этой точке требуется boolean
. Единственный случай, когда вы столкнулись с проблемами на Java, - это если вы напишите такой же код:
boolean ok = false;
if (ok = true) { // bug and lame style
print("the sky is falling!\n");
}
... который любой, у которого есть "хороший вкус", напишет как...
boolean ok = false;
if (ok) {
print("the sky is falling!\n");
}
Ответ 5
Будучи конкретным в этом, вы избегаете всего ИСТИННОГО в VB -1, а в других langauges истинно только NON ZERO. Сохранение логического поля как истинного или ложного сохраняет java вне этого аргумента.
Ответ 6
В соответствующей заметке: java-компилятор использует int для представления boolean, поскольку JVM имеет ограниченную поддержку для булевого типа. Посмотрите Раздел 3.3.4 Логический тип.
В JVM целочисленный нуль представляет false, а любое ненулевое целое представляет true (Источник: Внутри виртуальной машины Java от Билла Веннера)
Ответ 7
В c и С++ нет типа данных BOOLEAN Вот почему он использует 1 и 0 как истинное ложное значение. и в JAVA 1 и 0 подсчитываются как тип INTEGER, поэтому он вызывает ошибку в java. И java имеет свои собственные логические значения true и false с булевым типом данных.
👍👍 счастливое программирование..😊