Java の String.equals と == に関する比較共有

黄舟
リリース: 2017-08-20 09:36:37
オリジナル
1479 人が閲覧しました

この記事では、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート