知らないとミス連発!Java演算子の5大つまずきポイントと回避術

演算子について Java

Javaの演算子って、「+」や「==」のような簡単そうな記号ばかり。でも、実際にコードを書いてみると「これ、どう使うの?」と混乱する人が多いのが現実です。
私も、「==」と「equals()」の違いや「&&と||」の使い分けで何度もバグを出した経験があります。
この記事では、小学生でもわかる言葉や例を使って、Javaの演算子を「種類・使い方・違い・注意点」まで徹底的にわかりやすく解説します。
この記事を読んだ多くの初学者が、「ようやく頭の中が整理できた!」と感動しています。
a == ba.equals(b)、どっちを使うの?」という疑問も、この記事を読めばスッと理解できるようになります。
さあ、Javaの演算子に強くなって、バグのないコードを書けるようになりましょう!

演算子の種類が多すぎて混乱する〜全体像をつかもう〜

Javaにはたくさんの演算子がありますが、それぞれ役割が決まっていて、全体像を知ることで一気に理解が進みます。
演算子は「計算」「比較」「条件判断」「代入」など目的ごとに分かれていて、分類がわかれば覚えるのが簡単になります。

こちらは具体例です

  • 算術演算子:+, -, *, /, %(例:3 + 5
  • 代入演算子:=, +=, -=(例:x += 1;
  • 比較演算子:==, !=, <, >(例:a == b
  • 論理演算子:&&, ||, !(例:a > 10 && b < 5
  • 三項演算子:?:(例:x > 0 ? "正" : "負"
  • インクリメント・デクリメント:++, --

最初に「どういう種類があるのか」をざっくり理解しておくだけで、学習が何倍もスムーズになります!

演算子の優先順位や結合規則に戸惑う〜かっこがないとバグる理由〜

Javaには「この演算子は先に計算する」というルール=優先順位があり、それに従って計算が進みます。
人間の直感とは異なり、コンピュータは「決まった順番」で処理を進めます。優先順位を知らないと、思わぬバグになります。
具体例を見てみましょう!

int result = 2 + 3 * 4;
System.out.println(result); // 14になる

3 * 4 が先に計算されてから + 2 されるため、結果は 14 です。
これを強制的に変えるには「かっこ」で明示します。

int result = (2 + 3) * 4; // 20になる

また、結合規則には「左から右」「右から左」があります。 たとえば:

int x = y = z = 5;

これは z = 5y = 5x = 5 という順番(右から左)で代入されます。
優先順位と結合規則を意識して書くだけで、「なぜこの値になるの?」という疑問がスッキリ解決します!

論理演算子(&&、||、!)の意味や使い方が直感的にわからない

論理演算子は、「条件が正しいかどうか」を判断して、プログラムの流れをコントロールするための道具です。
複数の条件を組み合わせて、「全部合っているときだけ」「どれかが合っていれば」といった判断ができるようになります。
具体例を見てみましょう!

&&(アンド):両方の条件がtrueのときにtrueになります。

int age = 20;
boolean isStudent = true;
if (age > 18 && isStudent) {
  System.out.println("大人の学生です");
}

||(オア):どちらか1つでもtrueならtrueになります。

int age = 16;
boolean hasLicense = true;
if (age > 18 || hasLicense) {
  System.out.println("バイクに乗れる可能性あり");
}

!(ノット):trueをfalseに、falseをtrueに変えます。

boolean isAdult = false;
if (!isAdult) {
  System.out.println("未成年です");
}

論理演算子を使えば、「条件を組み合わせて判断する力」が身につき、if文がパワーアップします!

「==」と「equals()」の違いがわからない〜オブジェクト比較の落とし穴〜

==は「同じものか(同じ場所か)」を比べ、equals()は「中身が同じか」を比べます。
Javaでは、オブジェクトは「箱に入った住所のメモ」のようなもので、==はそのメモの場所を比べています。equals()は箱の中身(内容)を比べます。

String a = new String("hello");
String b = new String("hello");
System.out.println(a == b);      // false(違う場所)
System.out.println(a.equals(b)); // true(同じ内容)

プリミティブ型(int, booleanなど)では==で比較OKですが、オブジェクト型(Stringなど)はequals()を使いましょう。
「参照と値」の違いを理解すれば、==とequals()の正しい使い分けができるようになります!

三項演算子(条件演算子)の使い方が難しい〜if文との使い分け〜

三項演算子は、「if文を1行で書ける便利なツール」。でも、使いすぎると読みにくくなるので注意が必要です。
短い条件分岐なら三項演算子がスッキリ見やすくなります。ただし、複雑な処理を詰め込むと逆にわかりづらくなってしまいます。
例えば下のようなif文があったとします。

String result;
if (score >= 70) {
  result = "合格";
} else {
  result = "不合格";
}

これを三項演算子で書くと

int score = 85;
String result = score >= 70 ? "合格" : "不合格";
System.out.println(result);

このように書けます。
三項演算子の形は:

条件 ? trueのときの値 : falseのときの値

このような形で書けます!

注意点:

  • ネスト(入れ子)にすると読みづらくなります。
  • 値を返す処理だけに使いましょう。


三項演算子は「シンプルなifのショートカット」。使いどころを見極めれば、とても便利な演算子です!

まとめ 〜Java演算子の“迷子”から脱出しよう〜

この記事で解決したこと:

  • 演算子の種類を全体像で整理できた
  • 優先順位と結合規則の理解が深まった
  • ==とequals()の違いが明確になった
  • 論理演算子と三項演算子を安心して使えるようになった

最後にひとこと:
「演算子で表すロジック」を理解できれば、コードがもっと自由に書けます。演算子を味方にすれば、あなたのJavaスキルは一段とレベルアップします!

タイトルとURLをコピーしました