ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
String.equals とは
String.equals(Object obj) は文字列の中身(文字シーケンス)が等しいかを判定する Java のメソッドです。java.lang.Object の equals をオーバーライドし、参照ではなく内容で比較するように実装されています。
定義
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
| boolean | equals(Object anObject) | 文字列の内容比較。大文字小文字は区別する |
| boolean | equalsIgnoreCase(String anotherString) | 大文字小文字を無視して内容比較 |
| boolean | contentEquals(CharSequence cs) | StringBuilder 等の CharSequence と比較 |
基本例
String a = "hello";
String b = "hello";
String c = new String("hello");
// == は参照比較(リテラルは文字列プールで同一参照)
System.out.println(a == b); // true
System.out.println(a == c); // false (new で別オブジェクト)
// equals は内容比較
System.out.println(a.equals(b)); // true
System.out.println(a.equals(c)); // true
System.out.println(a.equals("HELLO")); // false (大文字小文字区別あり)
// 大文字小文字を無視
System.out.println(a.equalsIgnoreCase("HELLO")); // true
== と equals の違い
| 演算 / メソッド | 比較対象 | 結果 |
|---|---|---|
== | 参照(メモリアドレス) | 同じオブジェクトか |
.equals() | 内容 | 同じ文字列か |
Java 初心者が最も間違える点。文字列リテラル同士は文字列プールで共有されるため == でも一致してしまうことがあり、誤動作に気づきにくいバグを生みます。文字列の比較は必ず equals。
NullPointerException の罠
変数が null のときに equals を呼び出すと NullPointerException(NPE)が発生します。
String str = null;
// NG: str が null だと NPE
if (str.equals("OK")) { ... } // NullPointerException!
// 良い書き方 1: 定数側を先に置く(Yoda 記法)
if ("OK".equals(str)) { ... } // str が null でも false で OK
// 良い書き方 2: 明示的に null チェック
if (str != null && str.equals("OK")) { ... }
// 良い書き方 3: Objects.equals (Java 7+)
if (java.util.Objects.equals(str, "OK")) { ... }
equalsIgnoreCase — 大文字小文字を無視
String userInput = "YES";
if (userInput.equalsIgnoreCase("yes")) {
System.out.println("はいと判定");
}
// 国際化の罠: トルコ語の I 問題
// "TITLE".toLowerCase() は "tıtle" になる場合あり
// equalsIgnoreCase は内部で Locale 非依存に比較されるので安全
Objects.equals — null 安全な比較
Java 7 で導入された Objects.equals(a, b) は、両方 null なら true、片方だけ null なら false、両方非 null なら a.equals(b) を呼びます。NPE の心配なし。
import java.util.Objects;
String a = null;
String b = null;
System.out.println(Objects.equals(a, b)); // true
System.out.println(Objects.equals(a, "hello")); // false
System.out.println(Objects.equals("hello", "hello")); // true
独自クラスでの equals 実装
独自クラスを HashSet / HashMap / List.contains 等で正しく扱うには、equals と hashCode をセットでオーバーライドします。
public class User {
private final String id;
private final String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User other = (User) o;
return Objects.equals(id, other.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
equals の規約(重要)
Object.equals をオーバーライドする際は、以下の5 つの規約を必ず守ります。
| 規約 | 意味 |
|---|---|
| 反射性 | x.equals(x) == true |
| 対称性 | x.equals(y) == y.equals(x) |
| 推移性 | x.equals(y) && y.equals(z) なら x.equals(z) |
| 一貫性 | 状態が変わらない限り、何度呼んでも同じ結果 |
| 非 null 性 | x.equals(null) == false |
パフォーマンス
String の equals は最初の文字から順に比較するため、文字数 N に対して最悪 O(N)。長文字列を頻繁に比較するときは、ハッシュコード(hashCode)でフィルタするか、intern() で文字列プールに登録して == で比較するなどの最適化を検討します。
FAQ
Q: 文字列を switch で分岐したい
A: Java 7 以降、switch (str) がサポートされており、内部的に equals が呼ばれます。null だと NPE になるので事前チェック必須。
Q: compareTo との違いは?
A: equals は等しいかを boolean で返す。compareTo は辞書順で int(負/0/正)を返し、ソートに使う。
関連
- String — 不変な文字列クラス
- StringBuilder — 可変な文字列クラス
- Objects.equals — null 安全な比較
- hashCode — equals とセットでオーバーライド
- compareTo — 順序比較
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
コメントを削除してもよろしいでしょうか?