Java: OR論理演算子の評価条件

Sponsored Link

このエントリーをはてなブックマークに追加
はてなブックマーク - Java: OR論理演算子の評価条件
Bookmark this on Delicious
Share on LinkedIn
Bookmark this on Livedoor Clip
Bookmark this on Yahoo Bookmark

以前、OR演算の2つのオペランドが両方評価されるか否かがあやふやだったので以下のコードを以て改めて確認してみます。

public class Sample1 {
  public static void main(String[] args) {
    int i = 5, j = 10, k =15;
    if ((i++ < j) | (k-- > j))
      System.out.println("values of i: " + i + " values of k: " + k);
    if ((i < j) || (--k > j))
      System.out.println("values of k: " + k);
  }
}

実行結果は

values of i: 6 values of k: 14
values of k: 14

となります。
1つめのif文で使われている演算子はビット論理OR演算子で左右の両オペランドを評価します。よって式i++とk–が評価されているため結果はvalues of i: 6 values of k: 14となります。

2つめのif文で使われているのは短絡論理OR演算子で、評価順序は||の左側のオペランドを先ず評価し、それがtrueなら右側は評価せず(ORは片方が真ならもう片方の結果にかかわらず真ですから)、falseなら評価します。よって、if ((i < j) || (--k > j))ではi < jがtrueとなるため--k > jは評価されずkはデクリメントされません。よってkの値は変わらず、上記のような実行結果となります。

関連すると思われる記事:

Sponsored Link

This entry was posted in Java and tagged . Bookmark the permalink.

Facebook comments:

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>