Wenn Sie erstellen ein neues Objekt (entweder String oder andere), was zurückgegeben wird eine Kopie des Wertes Verweis auf das neue Objekt. Wenn zwei Objekte denselben Bezug haben, wird der Operator ==
als wahr ausgewertet.
dh.
Object o = new Object();
Object p = o; //<-- assigning the same reference value
System.out.println("o == p ? " + (o == p)); //<-- true
Wenn Sie zwei Objekte jeder haben ihre eigenen Referenzwert:
Object a = new Object();
Object b = new Object();
System.out.println("o == p ? " + (o == p)); //<-- false
Gleiche passiert mit Strings Objekte.
Wenn Sie ein String-Literal zuweisen, erhalten Sie die gleiche Referenz:
String x = "hello";
String y = "hello";
System.out.println("x == y ? " + (x == y)); //<-- true
Aber Sie beispiels Sie Erstellen neue Objekte sind daher unterschiedliche Referenzwerte sie haben.
Um effektiv Strings (oder jedes andere Objekt) zu vergleichen, sollten Sie die equals()
Methode verwenden.
Zeichenfolgenliterale werden standardmäßig an einen Zeichenfolgenpool gesendet, um die Leistung zu verbessern. Wenn Sie diesen Pool verwenden möchten, können Sie die Methode intern()
aufrufen, die das Objekt im Pool zurückgibt, wenn es existiert.
String a = "world";
String b = new String("world");
String c = new String("world").intern();//<-- returns the reference value in the pool.
System.out.println("a == b ? " + (a==b)); //<-- false
System.out.println("b == c ? " + (b==c)); //<-- false
System.out.println("a == c ? " + (a==c)); // true!
Was denkst du ist es? (Tipp: Nimm einen Texteditor und einen Compiler und finde es heraus) – OscarRyz
@@ OscarRyz: Ich will den Grund genau wissen. Deshalb habe ich hier – Fero
Dann fragen Sie: * "Ich bekomme das aber ich dachte, ich würde das bekommen ... warum ist es etc. etc" * – OscarRyz