ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?