преобразовать логическое значение в int в java

<p>каков наиболее приемлемый способ преобразования <code>boolean</code> в <code>int</code> в java?</p>

<pre><code>int myint = myboolean ? 1 : 0; </code></pre><p>^^</p><p>ps: true = 1 и false = 0</p>

<pre><code>int val = b? 1 : 0; </code></pre>

<p>использование троичного оператора - это самый простой, эффективный и самый читаемый способ сделать то, что вы хотите. я призываю вас использовать это решение.</p><p>однако я не могу удержаться, чтобы предложить альтернативное, надуманное, неэффективное, нечитаемое решение.</p><pre><code>int booltoint(boolean b) { return b.compareto(false); } </code></pre><p>эй, людям нравится голосовать за такие крутые ответы!</p><p><strong> правка </strong></p><p>кстати, я часто видел преобразования из логического значения в int с единственной целью - сделать сравнение двух значений (как правило, в реализациях метода <code>compareto</code>). <code>boolean#compareto</code> - это путь в этих конкретных случаях.</p><p><strong> правка 2 </strong></p><p>java 7 представила новую служебную функцию, которая работает непосредственно с примитивными типами, <code>boolean#compare</code> (спасибо <em>shmosel</em>)</p><pre><code>int booltoint(boolean b) { return boolean.compare(b, false); } </code></pre>

<pre><code>boolean b = ....; int i = -("false".indexof("" + b)); </code></pre>

<pre><code>public int booltoint(boolean b) { return b ? 1 : 0; } </code></pre><p>просто</p>

<pre><code>import org.apache.commons.lang3.booleanutils; boolean x = true; int y= booleanutils.tointeger(x); </code></pre>

<p>это зависит от ситуации. часто самый простой подход - лучший, потому что его легко понять:</p><pre><code>if (something) { otherthing = 1; } else { otherthing = 0; } </code></pre><p>или же</p><pre><code>int otherthing = something ? 1 : 0; </code></pre><p>но иногда полезно использовать enum вместо логического флага. представим себе, что существуют синхронные и асинхронные процессы:</p><pre><code>process process = process.synchronous; system.out.println(process.getcode()); </code></pre><p>в java enum может иметь дополнительные атрибуты и методы:</p><pre><code>public enum process { synchronous (0), asynchronous (1); private int code; private process (int code) { this.code = code; } public int getcode() { return code; } } </code></pre>

<p>если вы используете <a href="https://commons.apache.org/proper/commons-lang/">apache commons lang</a> (я думаю, что многие проекты используют его), вы можете просто использовать его так: </p><pre><code>int myint = booleanutils.tointeger(boolean\_expression); </code></pre><p>метод <code>tointeger</code> возвращает 1, если <code>boolean\_expression</code> равен true, иначе 0</p>

<p>если вам нужно сопоставление <code>true -> 1</code> и <code>false -> 0</code>, вы можете сделать следующее:</p><pre><code>boolean b = true; int i = b ? 1 : 0; // assigns 1 to i. </code></pre>

<p>если вы хотите запутать, используйте это:</p><pre><code>system.out.println( 1 & boolean.hashcode( true ) >> 1 ); // 1 system.out.println( 1 & boolean.hashcode( false ) >> 1 ); // 0 </code></pre>

<p>давайте поиграем с <code>boolean.compare(boolean, boolean)</code>. поведение функции по умолчанию: если оба значения равны, возвращается <code>0</code>, иначе <code>-1</code>.</p><pre><code>public int valueof(boolean flag) { return boolean.compare(flag, boolean.true) + 1; } </code></pre><p><em>объяснение</em>: как мы знаем, возвращение boolean.compare по умолчанию равно -1 в случае несоответствия, поэтому +1 сделайте возвращаемое значение для<strong> 0 </strong>для <code>false</code> и<strong> 1 </strong>для <code>true</code></p>

<pre><code>public static int convbool(boolean b) { int convbool = 0; if(b) convbool = 1; return convbool; } </code></pre><p>тогда используйте:</p><pre><code>myclass.convbool(abool); </code></pre>