В этом руководстве узнаем, как преобразовать boolean в int. Во-первых, рассмотрим, как Java обрабатывает эти два примитивных типа данных; затем рассмотрим несколько способов преобразования логического значения в целое число.
Типы данных
В Java целое число может быть представлено примитивным типом данных int или классом-оболочкой Integer. Примитивный тип данных представляет собой 32-разрядное целое число со знаком, представленное методом кодирования с дополнением до двух. Класс Integer служит оболочкой, которая позволяет выполнять операции с целыми числами без знака, а также обрабатывать целые (примитивные) значения как объекты для работы с дженериками.
С другой стороны, boolean не имеет определенного размера в памяти, но по умолчанию соответствует операционной системе и виртуальной машине Java (JVM). Точно так же, как и у всех примитивных типов данных в Java, у boolean есть класс-оболочка Boolean, которая позволяет логическим значениям вести себя как объекты.
Можно использовать примитивное значение и класс-оболочку обоих типов данных (boolean и int) для выполнения преобразования данных. Предполагая, что истинные и ложные логические значения представляют 1 и 0 соответственно, есть несколько подходов к преобразованию.
Примитивный boolean в int
Чтобы преобразовать примитивное логическое значение в целое, оцениваем условие выражения, чтобы определить целое число, которое хотим вернуть:
public int booleanPrimitiveToInt(boolean foo) {
int bar = 0;
if (foo) {
bar = 1;
}
return bar;
}
Можно упростить эту функцию, используя тернарный оператор:
public int booleanPrimitiveToIntTernary(boolean foo) {
return (foo) ? 1 : 0;
}
Этот подход использует примитивные типы данных (boolean и int) для выполнения преобразования. В результате получаем 1, если логическое выражение истинно. В противном случае метод возвращает 0.
Класс-оболочка
Используя класс-оболочку Boolean, есть несколько подходов к преобразованию:
- использовать статические методы класса Boolean;
- вызывать методы непосредственно из логического объекта.
Статические методы
Класс Boolean имеет метод compare, который можно использовать следующим образом:
public static int booleanObjectToInt(boolean foo) {
return Boolean.compare(foo, false);
}
Напомним, что статический метод compare возвращает 0, если оба аргумента имеют одинаковое значение. Другими словами, когда foo имеет значение false, результатом сравнения будет 0. В противном случае функция возвращает 1, если первый аргумент true, а второй аргумент false. Точно так же можно использовать тот же статический метод, изменив второй аргумент на true:
public static int booleanObjectToIntInverse(boolean foo) {
return Boolean.compare(foo, true) + 1;
}
На этот раз, если foo истинно, метод compare оценивает два аргумента с одинаковым значением, что приводит к 0. Однако добавление 1 к результату вернет ожидаемое целочисленное значение из истинной логической переменной.
Объект класса Boolean
Объект класса Boolean имеет такие функции, как compareTo, которые можно использовать:
public static int booleanObjectMethodToInt(Boolean foo) {
return foo.compareTo(false);
}
Используя метод booleanObjectMethodToInt, можно преобразовать логическое значение в целое число так же, как и со статическим методом. Точно так же можно применить обратную версию, изменив аргумент на true и добавив 1 к результату.
Apache Commons
Apache Commons – это популярная библиотека с открытым исходным кодом для Java, которая предоставляет служебный класс BooleanUtils. Можно добавить библиотеку в качестве зависимости в Maven следующим образом:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Если библиотека находится в файле pom.xml, можно использовать класс BooleanUtils для преобразования логических значений в целые числа:
public static int booleanUtilsToInt(Boolean foo) {
return BooleanUtils.toInteger(foo);
}
Как и пример метода booleanPrimitiveToIntTernary, внутри метод toInteger выполняет тот же тернарный оператор для выполнения преобразования.
Заключение
В этом руководстве узнали, как преобразовать логическое значение в целое число. Предполагая, что true преобразуется в 1, а false – в 0, мы исследовали различные реализации для достижения этого преобразования.
Примеры кода для этой статьи можно найти на GitHub.