JavaのOR演算子(|| と |)の使い方|if文・短絡評価・違いを完全解説

目次

1. Javaの「OR(または)」とは?

Javaにおける OR(または) は、主に 条件分岐(if文など)で「どちらか一方でも成り立てばOK」という判断を行うために使われます。
プログラミング初心者が最初につまずきやすいポイントでもあり、「AND(かつ)」との違いや、記号の意味を正しく理解することが重要です。

1.1 OR条件が必要になる典型的な場面

OR条件は、実務・学習のどちらでも非常によく登場します。例えば、次のようなケースです。

  • どちらかの条件を満たせば処理したい場合
    • 休日 または 週末なら処理を分岐したい
  • 複数の入力条件をまとめてチェックしたい場合
    • 値が null または 空文字ならエラーにしたい
  • 権限や状態を複数パターンで許可したい場合
    • 管理者 または 本人なら操作を許可する

日常会話で言えば、

「A または B のどちらかならOK」

という判断を、そのままコードに落とし込むイメージです。

1.2 JavaでORを表す基本的な書き方

Javaでは、論理的なORを表すために ||(パイプを2本) という演算子を使います。

if (conditionA || conditionB) {
    // conditionA または conditionB のどちらかが true のときに実行される
}

このコードは、次の意味になります。

  • conditionAtrue または
  • conditionBtrue

どちらか一方でも true であれば、if ブロックの中が実行されます。

1.3 「OR」は日本語の思考に近い条件判断

OR条件は、日本語の感覚に非常に近いため、最初は「文章に置き換える」ことが理解の近道です。

if (isHoliday || isWeekend) {
    System.out.println("今日は休みです");
}

これは日本語にすると、

祝日 または 週末 なら、『今日は休みです』と表示する」

という意味になります。

初心者のうちは、

  • 記号をそのまま覚えようとする
  • 文法として暗記しようとする

よりも、一度日本語に直して考えるほうが、理解が早く、ミスも減ります。

1.4 この記事でこれから解説すること

「java or」で検索する多くの人は、単に OR の意味だけでなく、次の点で混乱しています。

  • ||| は何が違うのか?
  • なぜ「右側が実行されない」ことがあるのか?
  • AND(&&)と一緒に使うときの注意点は?
  • 実務で安全に使うにはどう書けばいいのか?

この記事では、こうした疑問に対して、

  • 基本 → 仕組み → 注意点 → 実務での使い方

という順番で、初心者にも分かるように丁寧に解説していきます。

2. 論理OR演算子 || の基本(if文で最も使う)

JavaでOR条件を書くとき、最も基本かつ最も頻繁に使われるのが論理OR演算子 || です。
「java or」で検索した場合、まず理解すべき対象はこの || だと言って問題ありません。

2.1 || の意味と役割

論理OR演算子 || は、左右どちらか一方の条件が true であれば、全体が true になる演算子です。

条件A || 条件B

この式は、次のように評価されます。

条件A条件B結果
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

つまり、

両方が false のときだけ false
それ以外はすべて true

という非常にシンプルなルールです。

2.2 if文での基本的な使い方

実際のコードでは、|| はほぼ必ず if文の条件式 の中で使われます。

int age = 20;

if (age >= 18 || age == 17) {
    System.out.println("入場可能です");
}

この場合の意味は、

「年齢が18歳以上 または 17歳なら入場可能」

です。

どちらか一方でも条件を満たしていれば、if ブロックの中が実行されます。

2.3 || は boolean 同士をつなぐ演算子

|| の左右に書けるのは、必ず boolean 型(true / false)になる式です。

正しい例:

if (score >= 80 || score == 100) {
    // OK
}

間違った例:

if (score || 100) {
    // コンパイルエラー
}

数値や文字列をそのまま OR でつなぐことはできません。
必ず、

  • 比較演算子(==, >=, < など)
  • boolean変数
  • booleanを返すメソッド

と組み合わせて使います。

2.4 OR条件を使うとコードが読みやすくなる場面

|| を使うことで、複数の条件を 一つの判断としてまとめる ことができます。

if (status.equals("ADMIN") || status.equals("OWNER")) {
    System.out.println("操作が許可されています");
}

このコードは、

「管理者 または 所有者なら操作を許可する」

という意味が、非常に分かりやすく表現されています。

もしORを使わずに書くと、次のように冗長になってしまいます。

if (status.equals("ADMIN")) {
    System.out.println("操作が許可されています");
} else if (status.equals("OWNER")) {
    System.out.println("操作が許可されています");
}

OR条件を使うことで、

  • コード量が減る
  • 意図が一目で分かる
  • 修正・追加がしやすくなる

といったメリットがあります。

2.5 初心者が最初に覚えるべきポイント

この段階では、次の3点を押さえておけば十分です。

  1. ||「どちらか一方が true なら OK」
  2. if文の条件式で使うのが基本
  3. 左右は 必ず boolean になる式

3. 重要:|| は短絡評価(ショートサーキット)する

論理OR演算子 || を理解するうえで、最も重要な特徴
短絡評価(ショートサーキット評価)です。

ここを理解しているかどうかで、
安全なコードが書けるか/バグを生むかが大きく変わります。

3.1 短絡評価(ショートサーキット)とは?

短絡評価とは、左側の条件だけで結果が確定した場合、右側を評価しないという仕組みです。

OR条件の場合、ルールは次のとおりです。

  • 左側が true全体は必ず true
  • そのため 右側は実行されない
if (conditionA || conditionB) {
    // 処理
}

このとき、

  • conditionAtrue なら
    conditionB評価されません

3.2 短絡評価が起きる具体例

次のコードを見てみましょう。

boolean result = true || expensiveCheck();

この場合、

  • 左側が true
  • OR条件なので結果は確定

そのため、expensiveCheck() メソッドは 呼び出されません

これはエラーではなく、Javaの仕様どおりの正しい動作です。

3.3 なぜ短絡評価が重要なのか?

短絡評価には、実務上とても大きなメリットがあります。

1. 無駄な処理を避けられる

if (isAdmin || checkDatabase()) {
    // 処理
}
  • 管理者なら checkDatabase() を呼ぶ必要がない
  • DBアクセスや重い処理を自動的にスキップできる

パフォーマンス向上

2. 例外(エラー)を防げる

短絡評価は、エラー回避のために意図的に使われることも非常に多いです。

if (user == null || user.isGuest()) {
    // ゲスト処理
}

このコードでは、

  • user == nulltrue の場合
  • user.isGuest() は実行されない

そのため、NullPointerException が発生しません

初心者がよく書いてしまう危険なコードはこちらです。

if (user.isGuest() || user == null) {
    // 危険:NullPointerException の可能性あり
}

短絡評価を前提に、nullチェックは必ず左側に置く
これは実務ではほぼ常識です。

3.4 短絡評価で注意すべき落とし穴

短絡評価は便利ですが、知らずに使うと混乱の原因にもなります。

右側に「副作用のある処理」を書かない

if (flag || count++) {
    // 何かの処理
}

この場合、

  • flagtrue だと
  • count++実行されない

「必ず実行されると思っていた処理が実行されない」
というバグにつながりやすくなります。

3.5 初心者向けまとめ(短絡評価)

このセクションの要点は次のとおりです。

  1. ||左側が true なら右側を評価しない
  2. これはバグではなく Javaの仕様
  3. nullチェックや重い処理の回避に積極的に使う
  4. 副作用のある処理を条件式に書かない

4. ||| の違い(ここが一番つまずきやすい)

「java or」で検索している人の多くが混乱している原因が、
||| の見た目が似ている問題です。

結論から言うと、この2つは目的も性質もまったく別物です。

4.1 結論から理解する:||| は用途が違う

まずは違いを一言で整理します。

  • ||論理OR演算子(条件分岐用・短絡評価あり)
  • |ビットOR演算子(数値のビット操作用・短絡評価なし)

初心者のうちは、if文では基本的に || だけを使う
これを覚えておけば、ほぼ困りません。

4.2 booleanで使った場合の違い

実は | は boolean 同士でも使えます。
ここが混乱を招くポイントです。

boolean a = true;
boolean b = false;

System.out.println(a || b); // true
System.out.println(a | b);  // true

結果だけを見ると、どちらも true になります。
しかし、評価の仕方がまったく違います。

4.3 最大の違い:短絡評価の有無

|| の場合(短絡評価あり)

if (a || check()) {
    // 処理
}
  • a が true
  • 結果は確定
  • check()実行されない

| の場合(短絡評価なし)

if (a | check()) {
    // 処理
}
  • a が true でも
  • check()必ず実行される

ここが 決定的な違い です。

4.4 | を条件式で使う危険性

初心者がやってしまいがちなミスがこちらです。

if (user != null | user.isActive()) {
    // 危険
}

このコードは、

  • user != null が false の場合でも
  • user.isActive()必ず実行される

結果として、NullPointerException が発生します。

正しい書き方はこちらです。

if (user != null || user.isActive()) {
    // 安全
}

条件分岐では | を使わない
これは強く覚えておいてください。

4.5 | が本来使われる場面(ビットOR)

| は、ビット演算のための演算子です。

int READ  = 1; // 0001
int WRITE = 2; // 0010

int permission = READ | WRITE; // 0011

このように、

  • フラグを組み合わせる
  • 設定値をビットで管理する

といった場面で使われます。

4.6 初心者向け使い分けルール

迷ったときは、次のルールで判断してください。

  1. if文・条件分岐 → ||
  2. 数値のビット操作 → |
  3. booleanで | を使う必要はほぼない
  4. 短絡評価が欲しいなら必ず ||

次のセクションでは、
OR条件を複数組み合わせる書き方と、読みやすくするコツ
について解説します。

5. OR条件を複数組み合わせる書き方(括弧と読みやすさ)

実際のプログラムでは、OR条件が 2つだけ で終わることは少なく、
3つ以上の条件を組み合わせる場面が多くあります。

ここでは、正しい書き方と、可読性を落とさないための考え方を解説します。

5.1 OR条件をそのまま並べる基本形

OR条件は、|| を連続してつなぐことができます。

if (status.equals("ADMIN") || status.equals("OWNER") || status.equals("EDITOR")) {
    // 権限あり
}

意味はそのまま、

「ADMIN または OWNER または EDITOR なら権限あり」

です。

条件が少ないうちは、これで問題ありません。

5.2 条件が増えたときの問題点

OR条件が増えると、次のような問題が起きやすくなります。

  • 行が長くなり、読みづらい
  • 何を判定しているのか分かりにくい
  • 修正時にミスが起きやすい
if (a || b || c || d || e) {
    // 意図が分かりにくい
}

こうした場合は、書き方を工夫することが重要です。

5.3 boolean変数に分解して読みやすくする

最も簡単で効果的なのが、意味のあるboolean変数に分解する方法です。

boolean isAdmin  = status.equals("ADMIN");
boolean isOwner  = status.equals("OWNER");
boolean isEditor = status.equals("EDITOR");

if (isAdmin || isOwner || isEditor) {
    // 権限あり
}

これだけで、

  • コードの意図が一目で分かる
  • 条件の追加・削除が簡単
  • バグを生みにくい

という大きなメリットがあります。

5.4 AND(&&)とOR(||)を混ぜる場合の注意点

OR条件とAND条件を混在させる場合、必ず括弧を使うことをおすすめします。

// 推奨
if (isLogin && (isAdmin || isOwner)) {
    // 処理
}

括弧を付けない場合、意図しない評価順になることがあります。

// 非推奨(誤解を招く)
if (isLogin && isAdmin || isOwner) {
    // 読み手に優しくない
}

人が読んで即座に理解できない条件式は、将来の自分にとっても負債になります。

5.5 条件が複雑な場合はメソッド化する

条件がさらに複雑になる場合は、メソッドとして切り出すのが最も安全です。

if (isAllowedUser(user)) {
    // 処理
}

boolean isAllowedUser(User user) {
    return user != null && (user.isAdmin() || user.isOwner());
}

こうすることで、

  • if文がすっきりする
  • テストしやすくなる
  • ロジックの再利用ができる

というメリットがあります。

5.6 このセクションのまとめ

OR条件を複数使う場合は、次の点を意識してください。

  1. 条件が増えたら 分解する
  2. ANDとORを混ぜるときは 必ず括弧
  3. 複雑になったら メソッド化

6. 演算子の優先順位(ミスが起きやすいポイント)

Javaでは、演算子ごとに評価される順番(優先順位)が決まっています。
OR条件を扱うとき、この優先順位を正しく理解していないと、
「思った通りに動かない」バグを生みやすくなります。

6.1 &&|| の優先順位

論理演算子の中での優先順位は、次の順です。

  1. &&(AND)
  2. ||(OR)

つまり、ANDのほうがORより先に評価されます。

boolean result = false || true && false;

このコードは、次の順で評価されます。

  1. true && false → false
  2. false || false → false

結果は false になります。

6.2 括弧を付けた場合の評価順

括弧を付けると、その中が最優先で評価されます。

boolean result = (false || true) && false;

評価順は、

  1. false || true → true
  2. true && false → false

結果は同じ false ですが、評価の流れはまったく別です。

6.3 if文でよくある勘違い例

次のif文を見てください。

if (isLogin && isAdmin || isOwner) {
    // 処理
}

このコードは、Javaの優先順位ルールに従うと、
次のように解釈されます。

if ((isLogin && isAdmin) || isOwner) {
    // 処理
}

その結果、

  • ログインしていなくても
  • isOwner が true なら処理が実行される

という、意図しない挙動になる可能性があります。

6.4 意図を明確にする安全な書き方

意図が

「ログインしていて、かつ(管理者または所有者)」

であれば、必ず括弧を使います。

if (isLogin && (isAdmin || isOwner)) {
    // 正しい
}

この書き方なら、

  • 読み手にも分かりやすい
  • 優先順位を暗記する必要がない
  • 将来の修正でも安全

というメリットがあります。

6.5 優先順位を暗記する必要はない

初心者がやりがちなミスは、

  • 優先順位をすべて暗記しようとする
  • 括弧を付けないことに慣れてしまう

ことです。

実務では、

「迷ったら必ず括弧」

これだけ守れば十分です。

6.6 このセクションのまとめ

このセクションの要点は次のとおりです。

  1. &&|| より優先順位が高い
  2. 括弧があれば、そちらが最優先
  3. 意図が伝わらない条件式は危険
  4. 可読性のためにも括弧を使う

7. よくある落とし穴(バグ例と対策)

ここまでで OR演算子の基本や仕組みは理解できたはずです。
このセクションでは、初心者が実際につまずきやすい典型的なバグと、その安全な回避方法を紹介します。

「知っていれば防げた」というケースばかりなので、ぜひ一度目を通しておいてください。

7.1 nullチェックの順番ミスによるエラー

最もよくあるのが、nullチェックの順番ミスです。

危険な例

if (user.isActive() || user == null) {
    // 処理
}

このコードでは、

  • usernull の場合
  • user.isActive() が先に評価される

結果として、NullPointerException が発生します。

正しい例(短絡評価を活かす)

if (user == null || user.isActive()) {
    // 安全
}
  • 左側で null を判定
  • true なら右側は評価されない

短絡評価を前提に、必ず安全な条件を左に置く

これはOR条件だけでなく、AND条件でも非常に重要な考え方です。

7.2 | を使ってしまい短絡評価が効かない

見た目が似ているため、うっかり | を使ってしまうケースもあります。

if (user != null | user.isActive()) {
    // バグの原因
}

この場合、

  • user != null が false でも
  • user.isActive()必ず実行される

user が null なら即エラーです。

条件分岐では必ず || を使う
これを徹底してください。

7.3 条件式に副作用のある処理を書く

条件式の中に、値を変更する処理を書くのも危険です。

if (isValid || count++) {
    // 何かの処理
}
  • isValid が true の場合
  • count++ は実行されない

「countは必ず増える」と思っていると、気付きにくいバグになります。

対策:条件と処理を分離する

if (isValid) {
    count++;
}

または、

count++;
if (isValid) {
    // 処理
}

条件式は「判定だけ」に使う

7.4 可読性の低いOR条件は将来のバグを生む

次のような条件式は、一見動いても危険です。

if (a || b && c || d && e) {
    // 意図が分からない
}
  • 優先順位が直感的でない
  • 修正時に事故が起きやすい

改善例

boolean condition1 = a || b;
boolean condition2 = c || d;

if (condition1 && condition2) {
    // 分かりやすい
}

7.5 このセクションのまとめ

OR条件で起きやすいミスは、ほぼ次の4つに集約されます。

  1. nullチェックの順番を間違える
  2. ||| を取り違える
  3. 条件式に副作用を書く
  4. 読みにくい条件式を放置する

これらを避けるだけで、
安全で読みやすいJavaコードに一気に近づきます。

8. 実務で使えるサンプル集(コピペして試せる)

ここでは、実際の開発現場でよく使われるOR条件の具体例を紹介します。
どれも初心者がそのままコピーして使える形にしているので、
「こういう場面ではこう書く」という感覚を身につけてください。

8.1 入力チェック(null または 空文字)

ユーザー入力や外部データを扱う場合、null と空文字の両方をチェックする場面は非常に多くあります。

if (text == null || text.isEmpty()) {
    System.out.println("入力してください");
}
  • text == null が true の場合
  • text.isEmpty() は評価されない

短絡評価を活かした安全な書き方です。

8.2 権限チェック(複数ロールを許可する)

管理者や特定の権限を持つユーザーだけに処理を許可したい場合です。

if (isAdmin || isOwner) {
    // 許可されたユーザーのみ実行
}

条件が増えた場合でも、ORで自然に表現できます。

if (isAdmin || isOwner || isEditor) {
    // 権限あり
}

8.3 状態チェック(どれか1つでもNGなら処理しない)

OR条件は、「どれか1つでも問題があれば処理を止める」という書き方にも向いています。

if (isTimeout || isError || isDisconnected) {
    return;
}
  • 可読性が高い
  • 早期リターンで処理が整理される

➡ 実務でよく使われるパターンです。

8.4 例外回避を意識した条件式

オブジェクトの状態に応じて、安全にメソッドを呼び出したい場合です。

if (user == null || user.isGuest()) {
    showGuestPage();
}
  • nullチェックを左側に置く
  • 右側は安全な場合のみ評価される

OR条件と短絡評価の定番コンビネーションです。

8.5 ビットフラグを使ったOR(| を使う場面)

論理ORではなく、ビットORが必要な場面もあります。

int READ  = 1; // 0001
int WRITE = 2; // 0010
int EXEC  = 4; // 0100

int permission = READ | WRITE;

このように、

  • 設定値
  • 権限
  • 状態フラグ

をまとめて管理したい場合に、| が使われます。

8.6 サンプル集まとめ

実務でOR条件を書くときは、次の考え方が役立ちます。

  1. 入力チェックは nullを左に
  2. 複数条件は ORでまとめる
  3. 処理停止は 早期リターン
  4. 条件式は 安全・単純・副作用なし

9. まとめ(使い分け早見表つき)

ここまでで、Javaにおける OR(または)条件 の考え方と使い方を一通り解説してきました。
最後に、実務で迷わないための要点を整理します。

9.1 ||| の使い分け早見表

演算子主な用途短絡評価主な使用場面
``論理OR
``ビットORなし

判断基準はとてもシンプルです。

  • 条件分岐 → ||
  • ビット操作 → |

booleanの条件式で | を使う理由は、ほぼありません。

9.2 OR条件を書くときの基本ルール

OR条件で安全なコードを書くために、次のルールを意識してください。

  1. nullチェックは必ず左側
  2. 短絡評価を前提に書く
  3. 副作用のある処理を条件式に入れない
  4. 読みにくくなったら分解・メソッド化
  5. ANDとORを混ぜるときは必ず括弧

これだけ守れば、初心者でも 事故の少ないJavaコード が書けるようになります。

9.3 初心者がまず覚えるべき結論

この記事の結論を一言でまとめると、次のとおりです。

JavaのOR条件は、|| を使い、短絡評価を理解したうえで、安全な順序で書く。

細かい仕様をすべて暗記する必要はありません。
「なぜこの順序で書くのか」 が分かっていれば、自然と正しいコードになります。

10. FAQ(よくある質問)

10.1 Javaで OR は or と書けますか?

いいえ、書けません。
Javaでは、OR条件は 必ず記号で表現します。

  • 論理OR:||
  • ビットOR:|

or というキーワードは Java には存在しません。

10.2 ||| はどちらを使えばいいですか?

if文や条件分岐では必ず || を使ってください。

| はビット演算用であり、
条件分岐に使うと 短絡評価が効かず、バグの原因になります。

10.3 || の右側が実行されないことがあるのはなぜですか?

||短絡評価(ショートサーキット) を行うためです。

  • 左側が true の時点で結果が確定
  • 右側は評価されない

これはJavaの仕様であり、正しい動作です。

10.4 a && b || c はどう評価されますか?

&& のほうが || より優先順位が高いため、
次のように評価されます。

(a && b) || c

意図が分かりにくい場合は、必ず括弧を付けてください

10.5 booleanで | を使うのはアリですか?

文法的には可能ですが、おすすめしません

  • 短絡評価が効かない
  • 可読性が下がる
  • バグを生みやすい

特別な理由がない限り、boolean条件では || を使いましょう。

10.6 ビットOR(|)はどんな場面で使いますか?

主に次のような場面です。

  • 権限フラグの管理
  • 設定値の組み合わせ
  • 状態をビットで表現したい場合

これらは 条件分岐とは別の用途 だと理解しておくと混乱しません。