12 ответов:
использование тернарного оператора является самым простым, наиболее эффективным и наиболее читаемым способом сделать то, что вы хотите. Я призываю вас использовать это решение.
однако я не могу удержаться, чтобы не предложить альтернативное, надуманное, неэффективное, нечитаемое решение.
int boolToInt(Boolean b) { return b.compareTo(false); }Эй, люди любят голосовать за такие классные ответы !
Edit
кстати, я часто видел преобразования из логического в int с единственной целью сделать a сравнение двух значений (как правило, в реализациях
compareToметод).Boolean#compareTo- это путь в этих конкретных случаях.Edit 2
Java 7 представила новую служебную функцию, которая работает с примитивными типами напрямую,
Boolean#compare(спасибо shmosel)int boolToInt(boolean b) { return Boolean.compare(b, false); }
Это зависит от ситуации. Часто самый простой подход является лучшим, потому что его легко понять:
if (something) { otherThing = 1; } else { otherThing = 0; }или
int otherThing = something ? 1 : 0;но иногда полезно использовать перечисление вместо логического флага. Представим себе синхронные и асинхронные процессы:
Process process = Process.SYNCHRONOUS; System.out.println(process.getCode());в Java enum может иметь дополнительные атрибуты и методы:
public enum Process { SYNCHRONOUS (0), ASYNCHRONOUS (1); private int code; private Process (int code) { this.code = code; } public int getCode() { return code; } }
Если
true -> 1иfalse -> 0mapping-это то, что вы хотите, вы можете сделать: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.сравнение равно -1 в случае неправильного совпадения, поэтому +1 возвращает значение 0 на
Falseи 1 наTrue
public static int convBool(boolean b) { int convBool = 0; if(b) convBool = 1; return convBool; }затем использовать :
MyClass.convBool(aBool);
Comments