Подтвердить что ты не робот

Почему логическое значение в Java принимает только true или false? Почему бы не 1 или 0?

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

4b9b3361

Ответ 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 с булевым типом данных.

👍👍 счастливое программирование..😊