Java | 「関係演算子」と「等価演算子」 について

Java Java
スポンサーリンク

関係演算子と等価演算子の基本

はじめの一歩として、「数や文字をくらべて、結果として true/false を返す仕組み」を身につけましょう。条件分岐(if)や繰り返し(for/while)で必ず使います。

  • 関係演算子: 「大小」や「以上/以下」をくらべる(<, <=, >, >=
  • 等価演算子: 「等しい/等しくない」をくらべる(==, !=
  • 結果は必ず真偽値: 比較の結果は truefalse のどちらか

よく使う演算子と直感的な例

数値の比較

int a = 7;
int b = 4;

System.out.println(a < b);   // false(7は4より小さくない)
System.out.println(a <= 7);  // true(7は7以下)
System.out.println(a > b);   // true(7は4より大きい)
System.out.println(a >= 8);  // false(7は8以上ではない)
System.out.println(a == b);  // false(7と4は等しくない)
System.out.println(a != b);  // true(7と4は等しくない → 等しくないはtrue)
Java
  • ポイント: 「〜より小さい」「〜以上」など、日常の言葉に置き換えると理解しやすい。

文字と文字コードの比較(char)

char x = 'A'; // 文字コードが数値として存在します(Aは65)
char y = 'B'; // Bは66

System.out.println(x < y);   // true(65 < 66)
System.out.println(x == 'A'); // true
Java
  • ポイント: charは“1文字”を表し、内部的には数値として比較できます。

真偽値の比較(boolean)

boolean isReady = true;
System.out.println(isReady == true); // true
System.out.println(isReady != false); // true
Java
  • ポイント: if (isReady) のように、直接使うのが読みやすい。

つまずきやすいところ:== と equals の違い

基本型(int, double, char, boolean)では

  • == は「値が同じか」を判定します。例:3 == 3 は true。

参照型(String、配列、オブジェクト)では

  • == は「同じもの(同じ場所)を指しているか」を判定します(同一性)。
  • equals は「中身が同じか」を判定します(同値性)。
String s1 = new String("hello");
String s2 = new String("hello");

System.out.println(s1 == s2);      // false(別々に作られたオブジェクト)
System.out.println(s1.equals(s2)); // true(中身の文字列は同じ)
Java
  • ポイント: 文字列の比較は == ではなく equals を使うのが基本。

配列の比較は特に注意

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};

System.out.println(a == b); // false(別の配列)
Java
  • 中身を比べたい場合: Arrays.equals(a, b) を使います。
import java.util.Arrays;
System.out.println(Arrays.equals(a, b)); // true(要素がすべて同じ)
Java

実用例:if/while/for での使い方

if文で条件分岐

int age = 18;

if (age >= 20) {
    System.out.println("成人です");
} else {
    System.out.println("未成年です");
}
Java
  • ラベル: 判定の読み方: 「age が 20以上なら…、そうでなければ…」

while文で繰り返し

int count = 1;

while (count <= 5) {      // trueの間、繰り返す
    System.out.println("count = " + count);
    count++;              // これを忘れると無限ループ
}
Java
  • ラベル: 終了条件の意識: 条件がいつ false になるかを必ず考える。

for文で範囲を決めて繰り返し

for (int i = 0; i < 3; i++) {
    System.out.println("i = " + i); // 0, 1, 2
}
Java
  • ラベル: 典型パターン: 「初期値 → 条件(i < 3)→ 更新(i++)」の3点セット。

注意ポイント:浮動小数点の比較と境界条件

double/float の比較は誤差に注意

double x = 0.1 + 0.2;
System.out.println(x == 0.3); // 多くの場合 false(計算誤差のため)
Java
  • ラベル: コツ: 「ほぼ同じ」を判定したいなら、許容誤差(イプシロン)を使います。
double x = 0.1 + 0.2;
double eps = 1e-9;
System.out.println(Math.abs(x - 0.3) < eps); // true(差が小さいかで判定)
Java

境界条件(<= と < の違い)

int score = 60;

if (score >= 60) { // 60も含む
    System.out.println("合格");
} else {
    System.out.println("不合格");
}
Java
  • ラベル: 含む/含まない: <=>=は“しきい値を含む”、<>は“含まない”。

練習問題(手で動かして覚える)

  • 比較の基本練習:
int a = 10, b = 10, c = 12;
// それぞれの出力結果を予想してから実行
System.out.println(a == b);  // ?
System.out.println(a < c);   // ?
System.out.println(c != b);  // ?
Java
  • 文字列の比較:
String idInput = "USER01";
String idSaved = new String("USER01");

// 何が出力されるか予想してから実行
System.out.println(idInput == idSaved);      // ?
System.out.println(idInput.equals(idSaved)); // ?
Java
  • 合格判定ロジック:
    • 条件: 点数が70以上なら合格、60以上70未満なら「要追試」、60未満なら不合格
int score = 68;

if (score >= 70) {
    System.out.println("合格");
} else if (score >= 60) { // 60〜69
    System.out.println("要追試");
} else {
    System.out.println("不合格");
}
Java
  • whileの終了条件を作る:
    • 条件: 合計が100以上になるまで、1から順に足し続ける
int sum = 0;
int n = 1;

while (sum < 100) {
    sum += n;
    n++;
}
System.out.println("sum = " + sum + ", n = " + n);
Java
  • ラベル: 振り返りポイント: 「いつ true で、いつ false になるか」を説明できると理解が定着します。
タイトルとURLをコピーしました