Перейти к содержанию

Преобразование boolean в int в Java

В этом руководстве узнаем, как преобразовать 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.

Оригинал