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

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

Ответ 1

int myInt = myBoolean ? 1 : 0;

^^

PS: true = 1 и false = 0

Ответ 2

int val = b? 1 : 0;

Ответ 3

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

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

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

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

Edit

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

Изменить 2

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

int boolToInt(boolean b) {
    return Boolean.compare(b, false);
}

Ответ 4

boolean b = ....; 
int i = -("false".indexOf("" + b));

Ответ 5

public int boolToInt(boolean b) {
    return b ? 1 : 0;
}

простой

Ответ 6

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

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;
    }
}

Ответ 7

import org.apache.commons.lang3.BooleanUtils;
boolean x = true;   
int y= BooleanUtils.toInteger(x);

Ответ 8

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

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

Ответ 9

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

int myInt = BooleanUtils.toInteger(boolean_expression); 

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

Ответ 10

Если вы хотите обфускацию, используйте это:

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

Ответ 11

Позволяет играть трюк с 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

Ответ 12

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

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

MyClass.convBool(aBool);