この記事では、Java の String.equals と == の比較に関する関連情報を主に紹介します。必要な方は参考にしてください
Java の String.equals と == の比較
しかし昨夜、私は突然「asd」==getpara("password") に腹を立てました。確かに、JAVA の多くのことは、最も単純な新しい String など、私がこれまでに経験してきた言語とはまったく異なります。 ("asd") != 新しい文字列 ("asd")。
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)); } }
その場合、結果は少し不確かです、悪い考えを持っている人もいます、それを単独で取り除きます、少なくともそれは間違いありません一つは平等ではないでしょう。
これら 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 サイトの他の関連記事を参照してください。