[解決済み] Javaで文字列を比較するには?
質問
私は、これまで
==
演算子を使用して、すべての文字列を比較することができます。
しかし、私はバグに遭遇し、そのうちの1つを
.equals()
ということで、そのバグを修正しました。
は
==
が悪いのか?どんな時に使うべきで、どんな時に使ってはいけないのでしょうか?何が違うのでしょうか?
どのように解決するのですか?
==
は参照の等質性(同じオブジェクトであるかどうか)をテストします。
.equals()
は、値の等質性をテストします(論理的に "等しいかどうか")。
Objects.equals()
をチェックします。
null
を呼び出す前に
.equals()
を使用する必要はありません(JDK7以降で使用可能。
グアバ
).
したがって、2つの文字列が同じ値かどうかをテストしたい場合は、おそらく
Objects.equals()
.
// These two have the same value
new String("test").equals("test") // --> true
// ... but they are not the same object
new String("test") == "test" // --> false
// ... neither are these
new String("test") == new String("test") // --> false
// ... but these are because literals are interned by
// the compiler and thus refer to the same object
"test" == "test" // --> true
// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true
// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true
あなたはほとんど
<強い
いつも
を使いたい。
Objects.equals()
. で
レア
という場面で
知る
相手にしているのは
インターン
文字列を使用する場合、あなたは
できる
使用
==
.
から JLS 3.10.5. 文字列リテラル :
さらに、文字列リテラルは常に 同じ クラスのインスタンス
String
. これは、文字列リテラル、より一般的には、定数式の値である文字列 ( §15.28 ) - は、一意なインスタンスを共有するために、メソッドを使用して、"interned" されます。String.intern
.
同様の例は、以下のものにもあります。 JLS 3.10.5-1 .
その他考慮すべき方法
文字列.equalsIgnoreCase() 大文字と小文字を無視した値の等号を指定します。しかし、このメソッドはロケールに関連するさまざまなケースで予期せぬ結果をもたらす可能性があることに注意してください。 この質問 .
文字列.contentEquals()
の内容を比較します。
String
と、任意の
CharSequence
(Java 1.5以降で利用可能)。等価比較の前にStringBufferなどをStringに変換する手間が省けますが、Nullチェックはあなたに任されます。
関連
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] JavaScriptで複数行の文字列を作成する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
サーブレットクラスのインスタンス化エラーの解決法
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
linux run jarfile Invalid or corrupt jarfile error.
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決
-
[解決済み] Java Does Not Equal (!=) Not Working? [重複]する
-
[解決済み] String.equals対== [重複] です。