Für Java-Anfänger, anstatt die Bedeutung des Gleichheitsoperators (==) für String zu betrachten, "ob sie den gleichen Wert haben" Ich denke, einer der Punkte des Lernens ist zu sehen, "ob die Referenzen gleich sind".
Test1.java
public static void main(String[] args) {
String str1 = "100";// ⓵
String str2 = new String("100"); // ⓶
System.out.println(str1 == str2); //Falsch werden.
}
}
Ich verstehe, dass es zu diesem Zeitpunkt falsch sein wird. String kann jedoch entweder mit ⓵ oder ⓶ initialisiert werden. Wann werden die Referenzen gleich sein? Zum Beispiel:
Test2.java
public static void main(String[] args) {
String str1 = "100";
String str2 = "100";
System.out.println(str1 == str2); //Wahr werden.
}
}
Im obigen Beispiel ist es wahr. Nun, ich dachte, dass es falsch wäre, weil ich zwei verschiedene Referenztypvariablen gemacht habe. Es scheint, dass str1 und str2 zu diesem Zeitpunkt dieselbe Referenz betrachten, da der Gleichheitsoperator "ob die Referenz dieselbe ist" betrachtet.
Ich fragte mich, was das bedeutete. Nachdem ich herumgegangen war, kam folgendes heraus. Referenz: Informieren Sie sich über die Auswirkungen auf die Leistung bei Verwendung von String # intern ()
Der Punkt in String ist, wenn es eine Intern () -Methode gibt, und wenn Sie diese verwenden, gibt es ein String-Objekt mit derselben Zeichenfolge. Es scheint, dass alle Referenzen verfügbar sind. Dies reduziert den verschwendeten Speicher. Es ist ineffizient, Objekte einzeln zu erstellen, obwohl sie denselben Wert haben.
Passiert das nicht in Test2.java? Das heißt, die Intern () -Methode wird beim Initialisieren automatisch angewendet. Auf diese Weise verschwenden Sie keinen Speicher. Was passiert in den folgenden Fällen?
Test3.java
public static void main(String[] args) {
String str1 = new String("100");
String str2 = new String("100");
System.out.println(str1 == str2);
}
}
In diesem Fall scheint es falsch zu sein. Die Sache ist, dass beim Initialisieren mit new ~~ die Intern () -Methode nicht angewendet wird und nur als new bezeichnet wird. Es scheint also, dass Sie ein neues Objekt erstellen.
Zusammenfassung, -Wenn str1 = "100" und str2 = "100", ist das Referenzziel dasselbe.
Übrigens habe ich auch Folgendes ausgeführt, um herauszufinden, ob dieses Ereignis im Referenztyp auftritt oder ob der String etwas Besonderes ist.
Test4.java
public static void main(String[] args) {
Integer int1 = 100;
Integer int2 = 100;
System.out.println(str1 == str2);
}
}
Es war wahr. Im Fall eines Referenztyps können Sie, sofern Sie nicht neu schreiben, grundsätzlich sagen, dass Sie denselben Referenzpunkt betrachten.
Recommended Posts