ブール変数がある場合:
boolean myBool = true;
If/else句を使用すると、これの逆を取得できます。
if (myBool == true)
myBool = false;
else
myBool = true;
これを行うためのより簡潔な方法はありますか?
条件ステートメント(if
、for
、while
...)でよく行うように、論理NOT演算子!
を使用して割り当てます。すでにブール値を使用しているため、true
をfalse
に反転します(逆も同様です)。
myBool = !myBool;
さらにクールな方法(set変数を使用する場合、4文字より長い変数名の場合は_myBool = !myBool
_よりも簡潔です):
_myBool ^= true;
_
ちなみに、if (something == true)
は使用しないでください。if (something)
を実行する方が簡単です(falseとの比較と同じ、否定演算子を使用します)。
boolean
の場合は非常に簡単ですが、Boolean
の場合は少し難しくなります。
boolean
には、true
とfalse
の2つの状態しかありません。Boolean
には3があります:Boolean.TRUE
、Boolean.FALSE
またはnull
。boolean
(プリミティブ型)を扱っていると仮定すると、最も簡単なことは次のとおりです。
boolean someValue = true; // or false
boolean negative = !someValue;
ただし、Boolean
(オブジェクト)を反転する場合は、null
値に注意する必要があります。または、NullPointerException
になる可能性があります。
Boolean someValue = null;
Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.
この値が決してnullではなく、あなたの会社や組織が自動(アン)ボックス化に対するコードルールを持たないと仮定します。実際には、1行で書くことができます。
Boolean someValue = Boolean.TRUE; // or Boolean.FALSE
Boolean negativeObj = !someValue;
ただし、null
値にも注意を払う必要がある場合。次に、いくつかの解釈があります。
boolean negative = !Boolean.TRUE.equals(someValue); //--> this assumes that the inverse of NULL should be TRUE.
// if you want to convert it back to a Boolean object, then add the following.
Boolean negativeObj = Boolean.valueOf(negative);
一方、null
を反転後もnull
のままにする場合は、Apache commons
class BooleanUtils
( javadocを参照 )
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negativeObj = BooleanUtils.negate(someValue);
Apacheの依存関係を避けるため、すべてを書き出すことを好む人もいます。
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
boolean negative = (someValue == null)? null : !someValue.booleanValue();
Boolean negativeObj = Boolean.valueOf(negative);
最も簡潔な方法は、ブール値を反転させず、反対の条件を確認したいときにコードで後で!myBoolを使用することです。