JavaにはBooleanと呼ばれる論理値を表す単純な型があります。その値は、true または false の 2 つの値のいずれかのみです。次のプログラムは、ブール型の使用法を示しています。
// ブール値を示します。 class BoolTest { public static void main(String args[]) { boolean b = false; System.out.println("b is " + b); ("b is " + b); // ブール値で if ステートメントを制御できます。 if(b) System.out.println("これは実行されます。"); b = false System.out.println("これは実行されません。"); // 関係演算子の結果はブール値です System.out.println("10 > 9 is " + (10 > 9));
このプログラムを実行した結果は次のようになります。
b が false b が true 10 > 9 が true の場合に実行されます。
このプログラムには注目すべき興味深い点が 3 つあります。まず、メソッド println () を使用してブール値を出力すると、「true」または「false」が表示されることがわかりました。次に、ブール変数の値自体は、if ステートメントを制御するのに十分です。次のような if ステートメントを記述する必要はありません。
if(b == true) ...
3 番目に、関係演算子 (< など) の結果はブール値です。これが、式 10>9 が「true」と表示される理由です。さらに、プラス記号「+」演算子が演算子「>」よりも優先されるため、式 10>9 の両側に余分な括弧が追加されます。
JAVA Boolean 型の論理演算とビット単位の演算の違い
結果に関しては、2 つの演算の結果は同じですが、論理演算には「短絡」現象が発生しますが、ビット単位の演算には発生しません。また、ビット単位の演算には論理演算よりも多くの「XOR」機能があります。
短絡現象
クラス br { 静的ブール f1() { 戻り値; } 静的ブール値 f2() { 戻り値; } 静的ブール値 f3() { 戻り値 }} ブール値 f_1 = br.f1()&&br.f2()&&br.f3 ();
f1() が false の場合、後続の && 操作の結果は、それを実行しなくてもわかります。これにより、パフォーマンスが向上します。
ブール値 f_2 = br.f2()||br.f1()||br.f3();
同様に、結果は true となり、f2() は true となり、それ以上の操作を実行する必要はありません。
とても便利で効率的だと思われますが、まだ欠点もあります。
ブール値 f_3 = br.f2()||br.f3()&&br.f1();
結果は true になりますが、これは「短絡」によって引き起こされるエラーです。正しい答えを得るには、括弧を追加する必要があります。
f_3=( br.f2()||br.f3())&&br.f1();
ビット単位の演算では、ロジックにはない XOR 機能が提供されます。
ブール値 f = true^true;
結果 f = false;