【決定版】Javaの演算子を完全マスター!種類・使い方・注意点まで徹底解説

目次

1. はじめに

Javaは、業務システムやWebアプリケーション、Androidアプリの開発など、幅広い分野で使われている人気の高いプログラミング言語です。Javaを学び始めると、必ず出会う基本要素の一つが「演算子」です。演算子は、プログラム内で値を計算したり比較したりする際に欠かせない記号や記述ルールであり、どんなJavaプログラムでも頻繁に登場します。

「Java 演算子」というキーワードで情報を探している多くの方は、次のような悩みや疑問を持っているのではないでしょうか。

  • 演算子の種類や意味を整理したい
  • 実際にどのように使うのか具体例を見たい
  • 演算子の違いや注意点を知りたい

本記事では、Javaで使われる主要な演算子を体系的に解説し、初心者でも理解しやすいように基本から応用まで丁寧に説明します。また、よくあるエラーや注意点、現場で役立つコツもまとめています。演算子を正しく使いこなすことは、読みやすくバグの少ないコードを書く第一歩です。

これからJavaを始める方や、基礎をしっかり復習したい方にとって、本記事が「困ったときの決定版」となるよう、できるだけわかりやすく、具体例や図解も交えて解説していきます。
ぜひ最後までご覧いただき、Javaの演算子をしっかりマスターしてください。

2. Java演算子の全体像【早見表付き】

Javaでは、さまざまな演算子が用意されており、用途ごとに分類されています。ここでは、Javaで使われる代表的な演算子を大まかに整理し、まずは全体像を把握しましょう。はじめに「演算子早見表」を掲載しますので、各種演算子の役割や記法を一目で確認できます。

Java演算子一覧 早見表

分類演算子例主な用途サンプルコード例
算術演算子+, -, *, /, %数値の計算a + b, x % y
代入演算子=, +=, -=, *=, /=値の代入や更新x = 5, y += 2
比較演算子==, !=, >, <, >=, <=値の比較a == b, x >= y
論理演算子&&,, !
ビット演算子&,, ^, ~, <<, >>, >>>ビット操作
インクリメント/デクリメント++, —値の増減i++, –j
三項演算子? :条件による値の切り替えmax = (a > b) ? a : b
その他instanceofオブジェクトの型判定obj instanceof String

Javaの演算子は「計算」「比較」「条件分岐」など、多様な場面で使われます。特に算術・代入・比較・論理の各演算子は、どんなプログラムにも必ず登場すると言っても過言ではありません。

また、ビット演算子や三項演算子、instanceof演算子などは、やや上級者向けですが、知っておくとJavaの表現力が大きく広がります。

本記事では、これらの演算子を用途別にわかりやすく解説し、すぐに使える具体例も交えながら進めていきましょう。

3. 各演算子カテゴリの解説と具体例

Javaには多くの種類の演算子がありますが、ここではそれぞれのカテゴリごとに使い方や具体例、よくある注意点も交えて解説します。各演算子の特徴をしっかり把握しておきましょう。

3-1. 算術演算子(+, -, *, /, %)

算術演算子は、数値同士の計算に使用されます。四則演算や余りの計算など、プログラミングの基礎となる演算子です。

  • +(加算):2つの数値を足します。文字列同士では連結にも使われます。
  • -(減算):2つの数値の差を求めます。
  • *(乗算):2つの数値を掛けます。
  • /(除算):左の値を右の値で割ります。整数同士の割り算の場合は小数点以下が切り捨てられます。
  • %(剰余):割り算の余りを求めます。

例:

int a = 10;
int b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3 (小数点以下切り捨て)
System.out.println(a % b); // 1

注意点:

  • 整数型(int型)同士の除算は結果も整数になるため、小数点以下が切り捨てられます。
  • 文字列と「+」演算子を使うと、数値ではなく連結になります。

3-2. 代入演算子(=, +=, -=, *=, /=, %=)

変数に値を設定したり、更新する際に使われるのが代入演算子です。複合代入演算子を使うと、コードがより簡潔になります。

  • =(代入):右辺の値を左辺の変数に代入します。
  • +=(加算代入):変数の値に右辺を加え、結果を変数に代入します。
  • 他にも -=, *=, /=, %=

例:

int x = 5;
x += 3;  // x = x + 3 と同じ → xは8になる
x *= 2;  // x = x * 2 と同じ → xは16になる

ポイント:

  • 複合代入演算子は繰り返し計算やループ処理で特によく使われます。

3-3. 比較演算子(==, !=, >, <, >=, <=)・instanceof

値やオブジェクトが特定の条件を満たしているかどうかを調べるときに使います。

  • ==(等しい):2つの値が等しいかどうか
  • !=(等しくない):2つの値が異なるかどうか
  • >, <, >=, <=(大小比較)
  • instanceof:オブジェクトが特定の型かどうか判定

例:

int a = 5, b = 7;
System.out.println(a == b); // false
System.out.println(a < b);  // true

String str = "hello";
System.out.println(str instanceof String); // true

注意点:

  • 文字列やオブジェクトの内容比較にはequalsメソッドを使いましょう。==は参照比較(同じインスタンスか)です。

3-4. 論理演算子(&&, ||, !)

複数の条件を組み合わせて判定したいときに使うのが論理演算子です。

  • &&(AND):両方の条件がtrueならtrue
  • ||(OR):どちらか一方でもtrueならtrue
  • !(NOT):真偽値を反転

例:

int age = 20;
boolean isMember = true;
System.out.println(age >= 18 && isMember); // true
System.out.println(!(age < 18));           // true

ショートサーキット評価:

  • &&||は左側の評価だけで結果が決まる場合、右側の式は評価されません。

3-5. ビット演算子(&, |, ^, ~, <<, >>, >>>)

ビット演算子は整数値をビット単位で操作します。主にシステム開発やパフォーマンスが求められる場面で利用されます。

  • &(AND):両方のビットが1なら1
  • |(OR):どちらかのビットが1なら1
  • ^(XOR):どちらか一方のみ1なら1
  • ~(NOT):ビットを反転
  • <<(左シフト):ビットを左にずらす
  • >>(右シフト):符号付き右シフト
  • >>>(符号なし右シフト)

例:

int x = 5;   // 0101
int y = 3;   // 0011
System.out.println(x & y); // 1 (0001)
System.out.println(x | y); // 7 (0111)
System.out.println(x ^ y); // 6 (0110)
System.out.println(~x);    // -6
System.out.println(x << 1); // 10

3-6. インクリメント/デクリメント(++, –)

変数の値を1だけ増減させるときに使う演算子です。前置と後置で挙動が異なります。

  • ++:1増やす
  • --:1減らす

例:

int i = 0;
i++; // iは1になる
++i; // iは2になる

前置・後置の違い:

  • ++iは値を増やしてから使う、i++は使ってから増やす。

3-7. 三項演算子(条件演算子 ? :)

条件分岐を1行で簡潔に書ける演算子です。

構文:

条件式 ? 真の場合の値 : 偽の場合の値

例:

int max = (a > b) ? a : b;

ポイント:

  • if文よりも簡潔に書けるが、複雑な条件には使いすぎないようにしましょう。

このように、Javaの演算子は用途によってさまざまな種類があります。

4. 演算子の優先順位と結合規則

Javaの演算子は、複数の演算子を同時に使った場合にどの順番で計算されるかが決まっています。これを「演算子の優先順位」と呼びます。また、同じ優先順位の演算子が並んだときに、どちらから評価されるかを「結合規則」といいます。演算子の優先順位や結合規則を正しく理解していないと、思わぬバグや誤動作の原因となることがあります。

4-1. 演算子の優先順位一覧表

下記は代表的なJava演算子の優先順位をまとめた表です。数字が小さいほど優先的に評価されます。

優先順位演算子主な用途結合規則
1()丸括弧によるグループ化左から右
2++, --, !, ~, +, -単項演算子右から左
3*, /, %乗算、除算、剰余左から右
4+, -加算、減算左から右
5<<, >>, >>>シフト演算左から右
6<, <=, >, >=, instanceof比較、型判定左から右
7==, !=等価、不等価左から右
8&ビットAND左から右
9^ビットXOR左から右
10|ビットOR左から右
11&&論理AND左から右
12||論理OR左から右
13? :三項(条件)演算子右から左
14=, +=, -=, 他の代入演算子代入右から左

4-2. 優先順位・結合規則のイメージ図

例えば、以下のような式があるとします。

int result = 2 + 3 * 4;

この場合、*(掛け算)のほうが+(足し算)より優先順位が高いので、先に「3 * 4 = 12」が計算され、その後に「2 + 12 = 14」となります。

4-3. 括弧を使った明示的な優先順位指定

演算子の優先順位が複雑になる場合や、誤解を防ぎたい場合は、積極的に括弧()を使いましょう。括弧を使うことで、計算の順序を明示的に指定できます。

例:

int result = (2 + 3) * 4; // 2+3を先に計算し、結果は20になる

4-4. よくあるミス例と注意点

  • 優先順位を間違えて意図しない計算結果になることがあります。
  • 例:boolean flag = a > 0 && b < 10 || c == 5;
    • &&||より優先なので、「(a > 0 && b < 10) || c == 5」と同じ意味になる
  • 複雑な式では、必ず括弧を使う癖をつけることでバグを予防できます。

演算子の優先順位と結合規則は、初学者のうちは混乱しやすいポイントですが、一度ルールを覚えてしまえば、より意図した通りにJavaのコードを書けるようになります。

5. よくあるエラー・つまずきポイント

Javaの演算子はシンプルなようでいて、実は初学者から中級者まで「うっかりミス」や「思わぬ落とし穴」によく出会う分野です。ここでは、現場でよく起こるエラー例や、ありがちなつまずきポイントをまとめて解説します。

5-1. 整数同士の除算による意図しない結果

Javaでint型の数値同士を割り算すると、小数点以下は必ず切り捨てられます。

int a = 5;
int b = 2;
System.out.println(a / b); // 出力結果は2

小数点を含めたい場合は、どちらか一方をdouble型(もしくはfloat型)に変換して計算しましょう。

System.out.println((double)a / b); // 出力結果は2.5

5-2. 浮動小数点数の精度の問題

double型やfloat型を使う場合、演算結果にわずかな誤差が発生することがあります。たとえば、以下のような計算です。

double d = 0.1 + 0.2;
System.out.println(d); // 出力例: 0.30000000000000004

お金の計算など「正確な値」が必要な場合は、BigDecimalクラスを使うことが推奨されます。

5-3. ==演算子とequalsメソッドの違い

Javaでオブジェクト(特にString型など)の比較を行うときに、==equalsの使い分けを間違えるケースが多いです。

  • ==:変数が「同じインスタンス(参照)」かどうかを比較
  • equals:中身(値や内容)が等しいかどうかを比較
String s1 = new String("abc");
String s2 = new String("abc");

System.out.println(s1 == s2);      // false(参照が異なるため)
System.out.println(s1.equals(s2)); // true(内容は同じため)

5-4. ショートサーキット評価による副作用

論理演算子の&&||は、必要に応じて右辺の式の評価を省略する「ショートサーキット評価」を行います。この挙動を理解していないと、期待した副作用(変数の更新やメソッドの実行など)が発生しないことがあります。

int a = 0;
if (a != 0 && 10 / a > 1) {
    // ここは実行されない
}

上記の場合、a != 0がfalseなので、10 / aの式は評価されず、0除算エラーも発生しません。

5-5. 括弧の使い忘れによる意図しない判定

複雑な条件式で括弧を省略すると、優先順位の誤解からバグにつながることがあります。

boolean flag = a > 0 && b < 10 || c == 5;
// 本当は((a > 0) && (b < 10)) || (c == 5) のつもりでも
// 書き方や意図によっては違う評価になる場合あり

5-6. まとめ

  • 計算時の型(intかdoubleか)や比較方法(==かequalsか)は必ず確認
  • 複雑な式は「必ず括弧を使う」習慣をつける
  • ショートサーキット評価などJava特有の仕様にも注意

これらの注意点を押さえておくことで、Javaの演算子にまつわる典型的なミスを減らすことができます。

6. 実践!演算子を活用したサンプルコード集

ここでは、Javaの演算子を使った実用的なサンプルコードをいくつか紹介します。実際の開発現場で役立つ「演算子の使いどころ」や、初心者が理解を深めやすい応用例をまとめました。

6-1. if文での比較・論理演算子の活用

複数条件を組み合わせて分岐を制御したい場合、比較演算子と論理演算子は欠かせません。

int age = 25;
boolean isMember = true;

if (age >= 18 && isMember) {
    System.out.println("サービスを利用できます");
} else {
    System.out.println("利用条件を満たしていません");
}

6-2. ループでのインクリメント演算子の利用

カウンタ変数を使ったループ処理にはインクリメント(++)やデクリメント(–)がよく使われます。

for (int i = 0; i < 5; i++) {
    System.out.println("カウント: " + i);
}

6-3. 三項演算子で値を簡潔に分岐

三項演算子を使えば、if文を使わずに変数へ値を代入できます。

int score = 75;
String result = (score >= 60) ? "合格" : "不合格";
System.out.println(result); // 合格

6-4. 複合代入演算子でコードをシンプルに

変数の値を繰り返し更新する場合、複合代入演算子が便利です。

int total = 0;
for (int n = 1; n <= 10; n++) {
    total += n; // total = total + n と同じ意味
}
System.out.println("合計: " + total);

6-5. ビット演算子の実用例(フラグ管理)

複数のフラグをビットで管理するときにビット演算子が役立ちます。

int FLAG_READ = 1;   // 0001
int FLAG_WRITE = 2;  // 0010
int FLAG_EXEC = 4;   // 0100

int permission = FLAG_READ | FLAG_WRITE; // 0011

// 書き込み権限を持っているか判定
if ((permission & FLAG_WRITE) != 0) {
    System.out.println("書き込み権限あり");
}

6-6. 実践でありがちな複数演算子の組み合わせ

条件式が複雑な場合は、括弧を活用して誤解を防ぎましょう。

int a = 3, b = 7, c = 5;
if ((a < b && b > c) || c == 5) {
    System.out.println("条件を満たしています");
}

6-7. 読みやすいコードを書くためのコツ

  • 複雑な式は分割して記述する
  • 括弧を使って明示的に順序を示す
  • 変数名やコメントで意図を明確にする

これらのサンプルコードを実際に手元で動かしてみることで、演算子の理解が一層深まります。演算子を自在に使いこなせるようになれば、Javaでの開発もより楽しく、効率的になるはずです。

7. まとめ

ここまで、Javaで使われる主要な演算子について基礎から応用まで詳しく解説してきました。演算子は、プログラムの計算・判定・データ操作の基本となる存在であり、しっかりと理解し使い分けることで、より効率的でミスの少ないコーディングが可能になります。

7-1. 本記事の振り返り

  • Javaの演算子には、算術・代入・比較・論理・ビット・三項・インクリメント/デクリメント・instanceofなど多彩な種類があり、それぞれに用途や特徴がある
  • 演算子の優先順位や結合規則、ショートサーキット評価などJava特有のルールを知っておくことで、思わぬバグやミスを防げる
  • if文やループ、条件分岐など、実践的なコード例とともに学ぶことで理解が深まる
  • よくあるミスやつまずきポイント、型や比較方法の違いも確認しておくことが大切

7-2.学習アドバイス

演算子の使い方は、慣れるまでは「コードを書いて動かしてみる」ことが最も効果的です。本記事のサンプルコードや例題を実際に入力・実行してみて、体感しながら覚えていきましょう。わからない点や気になる点は、都度ドキュメントや解説記事を参照する習慣を持つと、理解がどんどん深まります。

Java演算子の基礎をしっかり身につけておくことで、どんなプログラムにも自信を持って取り組めるようになります。今後の学習や開発にぜひ役立ててください。

8. FAQ(よくある質問)

Javaの演算子について、学習者や現場のエンジニアからよく寄せられる疑問をまとめました。知識の定着や、ちょっとした疑問解消にご活用ください。

Q1. 文字列を連結するにはどの演算子を使いますか?
A1. 文字列同士を連結するには「+」演算子を使います。例えば、"Hello" + " World""Hello World" になります。数値と文字列を連結した場合も、結果は文字列となります。

Q2. ==演算子とequalsメソッドの違いは何ですか?
A2. ==は「参照が同じかどうか」を比較します。equalsメソッドは「内容が同じかどうか」を比較します。特にString型などのオブジェクト比較ではequalsを使いましょう。

Q3. インクリメント演算子の前置(++i)と後置(i++)の違いは?
A3. 前置(++i)は値を増やしてから式に反映され、後置(i++)は現在の値を使った後で値が増えます。ループや複雑な式で違いが出るため注意が必要です。

int i = 5;
System.out.println(++i); // 6が出力される
System.out.println(i++); // 6が出力され、iは7になる

Q4. 論理演算子のショートサーキット評価とは何ですか?
A4. &&||で使われる仕様で、左側の条件だけで結果が決まる場合は右側の式が評価されません。これにより不要な計算やエラー(例:0除算)を防ぐことができます。

Q5. 演算子の優先順位を明示的に変更したいときは?
A5. 丸括弧()を使いましょう。括弧で囲むと、その部分が優先的に評価されます。複雑な式やミス防止にも効果的です。

int result = (2 + 3) * 4; // 2+3が先に計算される

Q6. ビット演算子はどんな場面で使われますか?
A6. フラグ管理やハードウェア制御、パフォーマンスを重視する計算処理などで活躍します。たとえば複数のON/OFF情報をひとつの数値で効率よく管理したい場合などです。

Q7. Javaで独自の演算子を定義することはできますか?
A7. JavaではC++のように新しい演算子(演算子オーバーロード)を自作することはできません。ただし、独自メソッドを作って似たような処理を実現することは可能です。

他にも疑問や実践的な課題が出てきたら、公式ドキュメントや信頼できる学習サイトを参考にすると良いでしょう。

9. 参考リンク・外部公式リソース

Javaの演算子についてさらに深く学びたい方や、公式な情報を確認したい方のために、信頼できるリファレンスや学習リソースをまとめました。実際の開発や調べ物の際にも活用できるページです。

9-1. 公式ドキュメント

9-2. 学習に役立つ外部リンク

9-3. さらに理解を深めたい方へ

ご利用上の注意

上記リンク先は2025年5月時点での主要な学習サイトや公式リソースです。内容やURLは今後変更となる可能性があるため、常に最新情報のチェックをおすすめします。

本記事と合わせてこれらのリソースを活用することで、Javaの演算子に関する理解がより深まるはずです。実践や学習にお役立てください。