Javaプログラムの実行結果について疑問を持つことはよくあります。特に、論理演算子や代入演算子を使用した条件式では、期待通りの結果が得られないことがあります。この記事では、質問者が提示したコードを元に、なぜその結果になるのかを解説します。
1. コードの解説
まず、提供されたコードを確認してみましょう。
class test {
public static void main(String[] args) {
int x = 5;
boolean b1 = true;
boolean b2 = false;
if ((x == 4) && !b2)
System.out.print("1");
System.out.print("2");
if ((b2 = true) && b1)
System.out.print("3");
}
}
このコードは、いくつかの重要な要素を含んでいます。
- if文の条件式における論理演算子(&&)と代入演算子(=)の使用。
- 変数b2の変更が条件式にどう影響するか。
次に、このコードを実行した結果「2 3」となる理由を詳しく見ていきます。
2. 条件式の評価: 1つ目のif文
1つ目のif文は以下のようになっています。
if ((x == 4) && !b2)
この条件式の左側はx == 4、右側は!b2(b2がfalseなのでtrueになります)。しかし、論理演算子「&&」の性質により、左側の条件がfalseの場合、右側が評価される前にif文は終了します。
結果的に、このif文の条件式はfalseとなり、出力は「1」ではなくスキップされます。
3. 2つ目のif文の動作: 代入演算子の影響
次に、問題となる2つ目のif文を見てみましょう。
if ((b2 = true) && b1)
ここではb2 = trueと代入演算子が使われています。この部分は「b2にtrueを代入する」という意味になります。重要なのは、この代入演算子が結果としてtrueを返すことです。
そのため、代入後、b2はtrueになります。次に、b1(すでにtrue)の値と論理演算子「&&」が評価され、全体の式がtrueとなり、if文の中身が実行されます。結果として「3」が出力されます。
4. まとめ: Javaコードの実行結果とポイント
最終的に、このプログラムの実行結果は「2 3」となります。
- 1つ目のif文は、左側の条件(x == 4)がfalseのためスキップされ、「1」は表示されません。
- 2つ目のif文では、代入演算子b2 = trueが評価され、b2がtrueになるため、その条件式はtrueとなり、「3」が表示されます。
このように、代入演算子の使用や論理演算子の動作を理解することが、プログラムの挙動を正確に予測するために重要です。


コメント