-6

重複の可能性:
Javaの文字列プールに関する質問

Javaで文字列を宣言する2つの方法の違いは何ですか?

String se1 = "java";
String se2 = "java";
System.out.println(se1 == se2); // output true

String str1 = new String("OKAY");
String str2 = new String("OKAY");
System.out.println(str1 == str2); // output false
4

4 に答える 4

2

==オブジェクト上で参照によって比較します。文字列の最初のペアは、内部化と呼ばれる機能のために等しいと見なされました。文字列の内容が等しいかどうかを比較するには、次を使用します

s1.compareTo(s2) == 0

また

s1.equals(s2)
于 2013-02-03T17:34:09.687 に答える
2

文字列定数のインスタンスは1つだけです。たとえば、"ohai"==機能します。

新しいStringオブジェクトは、別の文字列の値から作成される可能性のある新しいオブジェクトです。

文字列は、ほとんどの場合.equals、たとえばと比較する必要があります

str1.equals(str2);

これは、参照ではなく文字列を比較します。

于 2013-02-03T17:34:23.483 に答える
1

最初のケースでは、 se1se2文字列リテラルとして宣言しました。したがって、==演算子を使用して、2つの文字列を比較できます。

しかし、後の場合、str1str2Stringオブジェクトであるため、==演算子による比較は失敗します。2つのオブジェクトを比較するには、equalsメソッドを使用する必要があります。

于 2013-02-03T17:35:11.283 に答える
1

==文字列を含むオブジェクトを比較する場合は使用しないでください。通常、参照==を比較するため、同じオブジェクトのみが返されます。代わりにメソッドを使用する必要があります。trueequals()str1.equals(str2)

Javaは文字列定数をキャッシュするため、最初のケースではときどき機能します。したがって"java"、どちらの場合も、Stringの同じインスタンスで表されます。

于 2013-02-03T17:36:01.043 に答える