-6

重複の可能性:
Java で文字列を比較するにはどうすればよいですか?

class StringTest {
public static void main(String[] args) {
String str1 = "Hi there";
String str2 = new String("Hi there");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
}

出力が出てきます:

                          False
                          true  

str1 と str2 が等しいように見えても、最初の出力が false になるのはなぜですか?

4

5 に答える 5

6

==変数の内容を比較します。(あなたはこれを からよく知っていますintA == intB。)

String変数にはオブジェクトへの参照が含まれているため、参照を比較します。String==

String str1 = "Hi there";
String str2 = new String("Hi there");

str1str2は異なる文字列オブジェクトを参照するため、異なる参照が含まれるため、str1 == str2yieldになりfalseます。

str1.equals(str2)一方、あなたが指摘したように、str1とが参照するオブジェクトを比較します。str2true

于 2012-07-24T12:40:01.693 に答える
1

演算子を使用するnewと、メモリ内に新しい参照が作成されるためです。

==同じではない両方のオブジェクトの参照を比較します。

内容を比較するには、equalsを使用します。

于 2012-07-24T12:41:43.940 に答える
0

==object reference contentsieを比較しますが、 iestr1を比較しませstr2object contentsequals()object contents(objects pointed by str1 and str2)

これもチェックしてください:

String str1 = "Hi there";
String str3 = "Hi there";

str1 == str3 => true

これは、JVMが文字列リテラルを異なる方法で処理するためです。こちらをチェック

于 2012-07-24T12:41:32.723 に答える
0

aioobe の回答に加えて、実際には equals メソッドを使用してオブジェクトを比較する必要があります。オブジェクトの == 演算子は、両方のオブジェクトの参照が同じメモリ アドレスを指している場合に比較します。

于 2012-07-24T12:41:10.097 に答える
0

Java では、newキーワードを使用してオブジェクトを作成すると、ある場所のヒープに作成されます。

次に3番目の参照変数を作成str3してnewも、参照を比較するとfalseになりますstr2

String str1 = "Hi there";
String str2 = new String("Hi there");
String str3 = new String("Hi there");

 str2==str3 gives you false

したがって、 scompareの値がではなく使用される場合。objectequalsreference

于 2012-07-24T12:45:08.720 に答える