1 最も単純なプログラム:
public class A { public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; System.out.println(s1 == s2); } }
true を出力することは、s1 と s2 が同じものを参照していると言う人が多いでしょう。しかし、このプログラムが別の方法で書かれていたら、間違いなく違ったものになるでしょう。
2 最初のバリエーション:
public class A { public static void main(String args[]) { String s1 = "Hello"; String s2 = new String("Hello"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); } }
または:
public class A { public static void main(String args[]) { String s1 = new String("Hello"); String s2 = new String("Hello"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); } }
別々に考えると、結果は少し不確かになります。少なくとも 1 つは同じではありません。
これら 2 つのプログラムの結果は false true です。理由は非常に単純です。JAVA は基本的に完全なオブジェクト指向言語であり、その参照 (メモリ アドレスとポインタに相当) を決定します。メソッドは、値が等しいかどうかを判断します。
次の式では:
String s1 = "Hello"; String s2 = new String("Hello");
JVM が取得するのは 2 つの異なるメッセージです:
1. 「Hello」文字列を作成したいです。
2. 元の文字列と同じではなく、新しい「Hello」文字列を作成したいです。
つまり、 s1 != s2.
3 2 番目の変形:
顺序排列: public class A { public static void main(String args[]) { String s1 = new String("Hello"); String s2 = new String("Hello"); String s3 = "Hello"; s1=s1.intern(); s2=s2.intern(); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); System.out.println(s3 == s2); System.out.println(s3.equals(s2)); } }
打乱顺序排列: public class A { public static void main(String args[]) { String s1 = new String("Hello"); String s3 = "Hello"; s1=s1.intern(); String s2 = new String("Hello"); s2=s2.intern(); //也可以String s2 = new String("Hello").intern(); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); System.out.println(s3 == s2); System.out.println(s3.equals(s2)); } }
そうすると、今度は明らかになるはずです =
2 つのオブジェクトですが、途中にいくつかの恥ずかしいものが追加されているため、答えは true true true true でなければなりません。
それでは、インターンとは何ですか?
4 インターンの役割:
インターンメソッドが呼び出されたとき、この String オブジェクトと等しい文字列がプールに既に含まれている場合 (オブジェクトは、equals(Object) メソッドによって決定されます)、プール内の文字列が返されます。 。それ以外の場合は、この String オブジェクトをプールに追加し、この String オブジェクトへの参照を返します。
インターンに該当する状況: 複数の同一メッセージが出現する可能性があるメッセージキューの設計など、複数の同一の大きな文字列が同時に出現する状況。
さまざまな効果に関する [JAVA] String.equals および == 関連記事の詳細については、PHP 中国語 Web サイトにご注意ください。