Heim  >  Artikel  >  Java  >  [JAVA] Unterschiedliche Auswirkungen von String.equals und ==

[JAVA] Unterschiedliche Auswirkungen von String.equals und ==

高洛峰
高洛峰Original
2016-12-16 09:50:531451Durchsuche

1 Das einfachste Programm:

public class A {    public static void main(String args[]) {
        String s1 = "Hello";
        String s2 = "Hello";
        System.out.println(s1 == s2);
    }
}

Viele Leute müssen sagen, dass sich die Ausgabe von „true“ tatsächlich auf die Ausgabe von „true“ bezieht. Aber wenn dieses Programm anders geschrieben wäre, wäre es definitiv anders.

2 Die erste Variante:

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));
    }
}

oder:

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));
    }
}

Dann ist das Ergebnis etwas unsicher, manche haben schlechte Ideen, zumindest einzeln betrachtet Einer von ihnen wird definitiv nicht gleich sein.

Die Ergebnisse dieser beiden Programme sind sehr einfach. s1 == s2 bestimmt seine Referenz (entspricht der Verwendung von Speicheradressen und Zeigern). Die objekteigene Methode, um zu bestimmen, ob die Werte gleich sind.

Im folgenden Ausdruck:

String s1 = "Hello";
String s2 = new String("Hello");

Was die JVM erhält, sind zwei verschiedene Nachrichten:
1. Ich möchte eine „Hallo“-Zeichenfolge erstellen.
2. Ich möchte eine neue „Hallo“-Zeichenfolge erstellen, nicht dieselbe wie die ursprüngliche.
Also, s1 != s2.

3 Die zweite Variante:

顺序排列:
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));
    }
}

Dann sollte es dieses Mal klar sein =
Zwei Objekte, Aber es gibt In der Mitte wurden einige schüchterne Dinge hinzugefügt, daher muss die Antwort wahr, wahr, wahr, wahr sein.
Was genau ist ein Praktikant?

4 interne Funktion:

Wenn die interne Methode aufgerufen wird und der Pool bereits eine Zeichenfolge enthält, die diesem String-Objekt entspricht (das Objekt wird durch die Methode equal(Object) bestimmt), wird es wird an die Poolzeichenfolge zurückgegeben. Andernfalls fügen Sie dieses String-Objekt zum Pool hinzu und geben einen Verweis auf dieses String-Objekt zurück.

Anwendbare Situationen von Praktikanten: Situationen, in denen mehrere identische große Zeichenfolgen gleichzeitig angezeigt werden, z. B. der Entwurf einer Nachrichtenwarteschlange, in der möglicherweise mehrere identische Nachrichten angezeigt werden.




Weitere Artikel zu [JAVA] String.equals und == verschiedenen Effekten finden Sie hier PHP chinesische Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn