ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本的な使い方
String a = "Hello";
String b = "HELLO";
a.equals(b); // false — 大文字小文字が違う
a.equalsIgnoreCase(b); // true — 大文字小文字を無視
"java".equalsIgnoreCase("JAVA"); // true
"abc".equalsIgnoreCase("abcd"); // false — 長さ違い
"".equalsIgnoreCase(""); // true
// 数字や記号は通常通り比較
"123".equalsIgnoreCase("123"); // true
"a@b".equalsIgnoreCase("A@B"); // true
equals と equalsIgnoreCase の使い分け
| 場面 | 推奨 | 理由 |
|---|---|---|
| パスワード比較 | equals | 大文字小文字も区別すべき |
| ID / トークン比較 | equals | 厳密一致が必要 |
| メールアドレス | equalsIgnoreCase | ドメインは case 非依存(RFC) |
| ファイル拡張子 | equalsIgnoreCase | .JPG と .jpg は同じ扱い |
| HTTP メソッド | equalsIgnoreCase | case 非依存(RFC 7230) |
| 列挙値("yes"/"no") | equalsIgnoreCase | ユーザ入力の揺れ吸収 |
null 安全な書き方
str.equalsIgnoreCase(null) は false を返すので右辺は null OK。ただし左辺が null だと NPE:
String a = null;
String b = "HELLO";
// ❌ NullPointerException
// a.equalsIgnoreCase(b);
// ✅ null チェック
if (a != null && a.equalsIgnoreCase(b)) { ... }
// ✅ null を考慮した片方向比較
"HELLO".equalsIgnoreCase(a); // false — null OK
// ✅ 定数を左に置く(Yoda 記法)
// 定数なら null にならないので NPE 起きない
"admin".equalsIgnoreCase(input); // input が null でも false
// ❌ Objects.equals は使えない(大文字小文字を見ない)
Objects.equals("HELLO", "hello"); // false
// ✅ Objects 系で null セーフかつ ignore case
boolean eq = a == b ||
(a != null && a.equalsIgnoreCase(b));
Locale の罠(トルコ語の I 問題)
標準 equalsIgnoreCase はLocale 非依存で安全ですが、toLowerCase() 経由の比較は危険:
import java.util.Locale;
// トルコ語ロケールだと "I".toLowerCase() == "ı" (ドットなし)
Locale tr = new Locale("tr", "TR");
"FILE".toLowerCase(tr); // "fıle" ← ドットなし i!
"FILE".toLowerCase(tr).equals("file"); // false
// ❌ 危険: ユーザの Locale 依存
if ("ADMIN".toLowerCase().equals("admin")) { ... }
// ✅ 安全1: equalsIgnoreCase は内部で Locale 非依存比較
if ("ADMIN".equalsIgnoreCase("admin")) { ... }
// ✅ 安全2: Locale.ROOT 指定
if ("ADMIN".toLowerCase(Locale.ROOT).equals("admin")) { ... }
equalsIgnoreCase の内部実装
JDK 内部では1 文字ずつ Character.toUpperCase / toLowerCase で比較。サロゲートペアや特殊文字は完全対応ではないので、Unicode 厳密比較が必要なら Collator を使います:
import java.text.Collator;
Collator collator = Collator.getInstance(Locale.JAPANESE);
collator.setStrength(Collator.SECONDARY); // case 無視
collator.compare("ABC", "abc") == 0; // true
collator.compare("ハンカク", "ハンカク") == 0; // 半角全角同一視(要 Strength 設定)
// 大量比較は CollationKey でキャッシュ
CollationKey k1 = collator.getCollationKey("Apple");
CollationKey k2 = collator.getCollationKey("apple");
k1.compareTo(k2) == 0; // true
compareToIgnoreCase(順序比較)
// 等値だけでなく順序が欲しいとき
"apple".compareToIgnoreCase("BANANA"); // 負(apple < banana)
// ソート
List<String> list = Arrays.asList("Banana", "apple", "Cherry");
list.sort(String.CASE_INSENSITIVE_ORDER);
// [apple, Banana, Cherry]
// Comparator
Comparator<String> c = Comparator.comparing(String::toLowerCase);
list.sort(c);
他言語の同等機能
| 言語 | 記法 | 備考 |
|---|---|---|
| Java | a.equalsIgnoreCase(b) | Locale 非依存 |
| Kotlin | a.equals(b, ignoreCase = true) | 標準ライブラリ |
| C# | string.Equals(a, b, StringComparison.OrdinalIgnoreCase) | Ordinal が安全 |
| JavaScript | a.toLowerCase() === b.toLowerCase() | locale-aware なら localeCompare |
| Python | a.casefold() == b.casefold() | Unicode 厳密 |
| PHP | strcasecmp($a, $b) === 0 | マルチバイトは mb_strtolower |
Unicode 厳密比較(casefold 相当)
// Java には casefold ピッタリは無い。Normalizer + toLowerCase
import java.text.Normalizer;
static String foldCase(String s) {
return Normalizer.normalize(s, Normalizer.Form.NFKC)
.toLowerCase(Locale.ROOT);
}
foldCase("file").equals(foldCase("FILE")); // true (合字fi→fi)
foldCase("Ⅷ").equals(foldCase("VIII")); // true (ローマ数字)
FAQ
Q: equalsIgnoreCase で日本語の比較は?
A: ひらがな・カタカナ・漢字には case 概念が無いので equals と同じ動作。半角全角の区別は残る。
Q: 高速化したい
A: ハッシュマップに入れるなら key.toLowerCase(Locale.ROOT) で正規化してから格納。比較毎の toLowerCase 呼び出しを避ける。
Q: equalsIgnoreCase は Unicode 完全対応?
A: 基本対応だが、サロゲートペアや特殊な合字は厳密ではない。Unicode 仕様準拠が必要なら ICU4J の UCharacter.foldCase。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- String.equals
- String.equalsIgnoreCase(大文字小文字を無視した等値比較)
- StringBuffer
- String.length
- String.trim
人気ページ
- 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
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 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
- 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
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・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
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?