So habe ich gelesen, dass, wenn Sie schreiben dies:Vergleicht man Strings in Java, die bereits im Speicherpool sind
String a="foo";
String b="foo";
System.out.println(a==b);
es wird „true“ drucken, weil die erste Implementierung des Speicherpool prüft die Suche nach " foo ", es kann es nicht finden, so dass es ein neues Objekt erstellt und foo in den Speicherpool legt, dann zeigt jede zweite Zeichenfolge auf dasselbe Objekt.
und wenn Sie schreiben:
String a="foo";
String b=new String("foo");
System.out.println(a==b);
es wird „false“ drucken, weil Sie eine Erstellung eines neuen Objekts für b zwingen, damit es es wird nicht nehmen aus dem Pool.
meine Frage ist, wenn Sie schreiben:
String a=new String("foo");
String b="foo";
System.out.println(a==b);
warum es immer noch "false" drucken? Ich meine "a" erstellt ein neues Objekt und schaut nicht in den Speicherpool, aber b sollte in den Speicherpool schauen und das erzeugte Objekt "a" finden und darauf zeigen. Was fehlt mir hier? danke.
a ist nicht in memoryPool, daher zeigen a und b auf dif-Referenzen .... –
'String a = new String (" foo ");' erstellt 2 Objekte. Zuerst erzeugt es "foo", dann erzeugt es einen anderen mit "new String". – marstran
Es ist einfach, Wir haben einen String-Pool für String-Zwecke und Objekt-Pool für Objekt, Sie können nicht einen String im String-Pool mit einem String-Objekt im Objekt Pool mit == direkt – PSo