Der Inhalt dieses Artikels befasst sich mit dem Unterschied zwischen „abc“ und einem neuen String („abc“) in Java? Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
Eine der Lieblingsfragen von Interviewern mit Java-Ingenieuren ist: Was ist der Unterschied zwischen „abc“ und new String („abc“)? Die besseren Antworten bringen Konzepte wie Java-Heap, Stack, konstanten Pool und Referenzen zum Vorschein. Aber heute geht es um mehr als das. Betrachten wir dieses Thema aus der Perspektive der Anleitung.
Text
Wir wissen, dass der kompilierte Bytecode der Java-Klasse eine Binärdatei ist, nicht für Menschen, sondern für Maschinen zum Lesen. Aber Java verfügt über eine Javap-Anweisung, die Bytecode in etwas übersetzen kann, das für Menschen verständlich ist.
javap ist ein Java-Klassendateizerleger, der dekompilieren kann (dh von javac kompilierte Dateien dekompilieren) und Sie können auch den vom Java-Compiler generierten Bytecode anzeigen. Wird zum Zerlegen von Klassendateien verwendet.
Jetzt gibt es eine Klasse, die wie folgt definiert ist
public class A01 { public static void main(String ... args){ String a = "123"; String c = new String("123"); } }
Zuerst verwenden Sie javac A01.java, um es in Bytecode zu kompilieren, und verwenden Sie dann javap -c A01.class, um es zu dekompilieren. Holen Sie sich den folgenden Text
rrreeWir schauen uns hauptsächlich den folgenden Text über die Hauptmethode an. Es sind nicht viele Anweisungen enthalten
ldc: Laden Sie das konstante Licht in den Operandenstapel
astore_1: Speichern Sie den Wert des obersten Elements des Stapels in Variable 1.
neu: Öffnen Sie Speicherplatz für die zu erstellende Klasseninstanz und verschieben Sie die Adresse in den Operandenstapel.
dup: Kopieren Sie die oberster Wert des Operandenstapels, und schieben Sie ihn an die Spitze des Stapels
invokespecial: Rufen Sie eine Methode auf. Die Methode im Beispiel ist der Konstruktor der Klasse
Jetzt kombinieren wir den Befehls- und Operandenstapel um eine Berechnung zu simulieren
Zurück zur ursprünglichen Frage, der Unterschied zwischen a="123" und a=new String("123"), ersterer zeigt auf die Adresse des Konstantenpools, und letzterer zeigt auf die neue Zeichenfolge in der Heap-Öffnungsadresse. Die Ergebnisse dieser beiden == sind natürlich ungleich. Was ist mit dem Ergebnis von equal? equal vergleicht den Inhalt Zeichen für Zeichen und ist gleich.
Dieser Artikel ist hier zu Ende. Weitere spannende Inhalte finden Sie in der Spalte Java-Tutorial-Video auf der chinesischen PHP-Website!
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „abc' und new String („abc') in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!