ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
比較演算子の一覧
| 演算子 | プリミティブ | 参照型 |
|---|---|---|
== / != | 値が等しいか | 同じインスタンスか |
< > <= >= | 大小 | 使えない(コンパイルエラー) |
equals() | — | 中身が等しいか(実装しだい) |
compareTo() | — | 負 / 0 / 正 で順序を返す |
instanceof | — | その型か |
プリミティブは値で比べられる
int a = 10, b = 10;
System.out.println(a == b); // true
System.out.println(a >= 5); // true
char c = 'A';
System.out.println(c == 65); // true char は数値として比較される
// 浮動小数点は誤差があるので == で比べない
double x = 0.1 + 0.2;
System.out.println(x == 0.3); // false
System.out.println(Math.abs(x - 0.3) < 1e-9); // true
// NaN はどれとも等しくない
double n = 0.0 / 0.0;
System.out.println(n == n); // false
System.out.println(Double.isNaN(n)); // true
String を == で比べない
String a = "abc";
String b = "abc";
System.out.println(a == b); // true 同じリテラルは共有される
String c = new String("abc");
System.out.println(a == c); // false 別のインスタンス
System.out.println(a.equals(c)); // true 中身は同じ
String d = "ab" + "c"; // コンパイル時に "abc" になる
System.out.println(a == d); // true
String e = "ab";
String f = e + "c"; // 実行時に作られる
System.out.println(a == f); // false ← 開発中は気づけない
Scanner sc = new Scanner(System.in);
String input = sc.nextLine(); // "abc" と入力しても
System.out.println(input == a); // false
リテラルどうしでは == が通ってしまうため、テストでは動いて本番で動かないという形で表面化します。文字列の比較は必ず equals() にしてください。
// null の可能性がある変数を左に置かない
String input = null;
// input.equals("abc"); // NullPointerException
"abc".equals(input); // false(安全)
Objects.equals(input, "abc"); // false(安全・こちらが推奨)
// 大文字小文字を無視する
"ABC".equalsIgnoreCase("abc"); // true
// 空白を無視して比べる
" abc ".trim().equals("abc"); // true
ラッパー型の落とし穴
Integer a = 100, b = 100;
System.out.println(a == b); // true -128〜127 はキャッシュ済み
Integer c = 200, d = 200;
System.out.println(c == d); // false 別インスタンス
System.out.println(c.equals(d)); // true
int e = 200;
System.out.println(c == e); // true 片方が int ならアンボックス化される
Integer f = null;
// System.out.println(f == 200); // NullPointerException(アンボックス化で落ちる)
System.out.println(Objects.equals(f, 200)); // false(安全)
小さい値では == が通り、大きい値で通らなくなるため、テストデータの値によって挙動が変わります。ラッパー型は常に equals() で比べてください。
equals と hashCode
public class User {
private final int id;
private final String name;
public User(int id, String name) { this.id = id; this.name = name; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User other)) return false;
return id == other.id && Objects.equals(name, other.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}
equals() を書いたら hashCode() も必ず書きます。片方だけだと HashMap や HashSet で「入れたのに見つからない」現象が起きます。
Set<User> set = new HashSet<>();
set.add(new User(1, "田中"));
System.out.println(set.contains(new User(1, "田中")));
// hashCode を実装していないと false になる
// record なら equals / hashCode / toString が自動生成される
public record UserRecord(int id, String name) {}
System.out.println(new UserRecord(1, "田中").equals(new UserRecord(1, "田中"))); // true
大小の比較(compareTo)
System.out.println("apple".compareTo("banana")); // 負(apple のほうが前)
System.out.println("b".compareTo("a")); // 正
System.out.println("a".compareTo("a")); // 0
Integer.compare(1, 2); // -1
Double.compare(1.5, 1.5); // 0
LocalDate.of(2026, 9, 7).isBefore(LocalDate.now());
// 戻り値の符号だけを見る(1 や -1 とは限らない)
if ("apple".compareTo("banana") < 0) { }
// if (a.compareTo(b) == -1) { } ← 保証されていない
// 並べ替え
List<User> users = new ArrayList<>();
users.sort(Comparator.comparingInt(User::getId));
users.sort(Comparator.comparing(User::getName).reversed());
users.sort(Comparator.comparingInt(User::getAge)
.thenComparing(User::getName));
// null を含む場合
users.sort(Comparator.comparing(User::getName,
Comparator.nullsLast(Comparator.naturalOrder())));
compareTo() の戻り値は符号だけが意味を持ちます。== -1 や == 1 で判定してはいけません。
null の扱い
String s = null;
System.out.println(s == null); // true null 判定は == でよい
// System.out.println(s.equals(null)); // NullPointerException
System.out.println(Objects.equals(s, null)); // true
// null と空文字を区別する
System.out.println(s == null || s.isEmpty());
// 既定値を用意する
String name = Objects.requireNonNullElse(s, "名無し");
// 引数の検証(早い段階で落とす)
public void run(String value) {
Objects.requireNonNull(value, "value は必須です");
}
詳細は nullもしくは空文字の判定 を参照してください。
よくある間違いのまとめ
| 書き方 | 問題 | 正しい書き方 |
|---|---|---|
str1 == str2 | 参照を比べている | Objects.equals(str1, str2) |
intObj1 == intObj2 | 128 以上で false になる | intObj1.equals(intObj2) |
d1 == d2(double) | 誤差で一致しない | Math.abs(d1 - d2) < 1e-9 |
value.equals("x") | value が null だと落ちる | "x".equals(value) |
a.compareTo(b) == -1 | -1 とは限らない | a.compareTo(b) < 0 |
equals だけ実装 | Set / Map で見つからない | hashCode も実装する |
bd1.equals(bd2)(BigDecimal) | スケールが違うと false | bd1.compareTo(bd2) == 0 |
関連
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?