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

Каков наиболее приемлемый способ преобразования boolean в int в Java?

 int myInt = myBoolean ? 1 : 0; 

^^

PS: true = 1 и false = 0

 int val = b? 1 : 0; 

Использование тернарного оператора – это самый простой, самый эффективный и наиболее читаемый способ делать то, что вы хотите. Я рекомендую вам использовать это решение.

Однако я не могу сопротивляться предложению альтернативного, надуманного, неэффективного, нечитаемого решения.

 int boolToInt(Boolean b) { return b.compareTo(false); } 

Эй, люди любят голосовать за такие classные ответы!

редактировать

Кстати, я часто видел преобразования с логического на int с единственной целью сравнения двух значений (как правило, в реализациях метода compareTo ). Boolean#compareTo – это способ пойти в этих конкретных случаях.

Изменить 2

Java 7 представила новую функцию утилиты, которая работает с примитивными типами напрямую, Boolean#compare (Thanks shmosel )

 int boolToInt(boolean b) { return Boolean.compare(b, false); } 
 boolean b = ....; int i = -("false".indexOf("" + b)); 
 public int boolToInt(boolean b) { return b ? 1 : 0; } 

просто

Это зависит от ситуации. Часто самый простой подход является лучшим, потому что его легко понять:

 if (something) { otherThing = 1; } else { otherThing = 0; } 

или

 int otherThing = something ? 1 : 0; 

Но иногда полезно использовать Enum вместо булевского флага. Представьте себе, что существуют синхронные и асинхронные процессы:

 Process process = Process.SYNCHRONOUS; System.out.println(process.getCode()); 

В Java перечисление может иметь дополнительные атрибуты и методы:

 public enum Process { SYNCHRONOUS (0), ASYNCHRONOUS (1); private int code; private Process (int code) { this.code = code; } public int getCode() { return code; } } 
 import org.apache.commons.lang3.BooleanUtils; boolean x = true; int y= BooleanUtils.toInteger(x); 

Если true -> 1 а false -> 0 – это то, что вы хотите, вы можете сделать:

 boolean b = true; int i = b ? 1 : 0; // assigns 1 to i. 

Если вы используете Apache Commons Lang (который, как мне кажется, многие проекты используют его), вы можете просто использовать его следующим образом:

 int myInt = BooleanUtils.toInteger(boolean_expression); 

toInteger возвращает 1, если boolean_expression истинно, 0 в противном случае

Если вы хотите запутать, используйте это:

 System.out.println( 1 & Boolean.hashCode( true ) >> 1 ); // 1 System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0 

Позволяет играть трюк с Boolean.compare(boolean, boolean) . Поведение функции по умолчанию: если оба значения равны, чем возвращает 0 противном случае -1 .

 public int valueOf(Boolean flag) { return Boolean.compare(flag, Boolean.TRUE) + 1; } 

Объяснение : Как мы знаем, возврат по умолчанию Boolean.compare равен -1 в случае неправильного совпадения, поэтому +1 возвращает значение 0 для False и 1 для True

 public static int convBool(boolean b) { int convBool = 0; if(b) convBool = 1; return convBool; } 

Затем используйте:

 MyClass.convBool(aBool); 
  • Java Swing: как я могу реализовать экран входа в систему, прежде чем показывать JFrame?
  • Найдено общие ссылки на коллекцию org.hibernate.HibernateException
  • #define в Java
  • Тип безопасности: непроверенный литой
  • ограничение отладки java ssl debug
  • Длинный список операторов if в Java
  • Java generics: Collections.max () подпись и компаратор
  • Как отобразить легенду для круговой диаграммы в столбцах?
  • Как настроить параметры памяти Tomcat 5.5 JVM без использования программы конфигурации
  • Получить int из String, также содержащий буквы, в Java
  • Как добавить дополнительный исходный каталог для maven для компиляции и включения в сборку jar?
  • Interesting Posts

    Spark SQL – загрузка данных с помощью JDBC с использованием оператора SQL, а не имя таблицы

    требование не определено

    Должно ли шифрование программного обеспечения влиять на «Скорость передачи данных на диске» из Windows Experience?

    Mac OS X и несколько версий Java

    Пример цикла в MySQL

    Очистите весь стек истории и запустите новое действие на Android

    Hadoop: сжатие файла в HDFS?

    Службы Google Play устарели. Требуется 10084000, но найдено 9879470. Не удается обновить

    Создание журналов использования, которые доказывают мое подключение к Интернету,

    Пространства имен и разрешение оператора

    Получение сообщения консоли: ipc_kmsg_copyout_header: невозможно увеличить пространство пользователя ipc. Любые Mac-серверы Mac OS X здесь?

    Проблема с загрузкой FLV-видео в webview

    Как отправить электронное письмо по событию (с информацией о мероприятии) в Windows 7

    Notepad ++ clone view – более 2

    Android Studio: Где окно вывода compiler errors?

    Давайте будем гением компьютера.