Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen

Ausführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen

不言
不言nach vorne
2018-10-22 15:23:262012Durchsuche

Dieser Artikel bietet Ihnen eine detaillierte Erklärung zur Verwendung von Javap zur Analyse von Java-String-Operationen. Ich hoffe, dass er Ihnen als Referenz dienen wird.

Sehen wir uns diese Java-Codezeile für eine einfache String-Zuweisungsoperation an.

String a = "i042416";

Verwenden Sie die Befehlszeile, um die Java-Klasse zu dekompilieren, die diese Codezeile enthält, um ihren Bytecode anzuzeigen:

javap -v konstant.ConstantFolding

Ausführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen

Wir sehen, dass die Zeichenfolge „i042416“ vom Java-Compiler zum Konstantenpool hinzugefügt wurde.

Ausführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen

Java-Code String a = „i042416“ wird in die folgenden zwei Sätze Bytecode übersetzt:

Ausführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen

ldc #16: Zuerst wird die native Methode StringTable::intern am unteren Rand der JVM aufgerufen, um die interne Speicherimplementierung von String char[] zu generieren. Führen Sie dann ldc #16 aus, um die Konstante mit dem Codenamen #16 im Konstantenpool auf den Stapel zu laden, d. h. i042416.

2. astore_1: Speichern Sie die Referenz von „i042416“ in der lokalen Variablen mit der Seriennummer 1 (d. h. der lokalen Variablen a in unserem Code).

Sehen wir uns ein etwas komplexeres Beispiel an.

Führen Sie einen String-Verkettungsvorgang durch.

String aa1 = "i042416";
String aa2 = "jerrywang";
String aa3 = "i042416" + "jerrywang";

Sie können sehen, dass während der Kompilierungsphase das Compiler-Byte die Werte der beiden String-Konstanten verkettet und das Ergebnis „i042416jerrywang“ in der Variablen aa3 als neue String-Konstante gespeichert wird , in der Konstante Der Codename im Pool ist #21.

Ausführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen

Ausführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen

Daher zeigen die Variablen aa1 und aa3 tatsächlich auf die Konstantenpool Dieselbe Konstante in , sodass ein direkter Vergleich mit == ebenfalls „true“ zurückgibt.

String aa1 = "i042416jerrywang";
String aa2 = "jerrywang";
String aa3 = "i042416" + "jerrywang";
System.out.println(aa1 == aa3);

Ausführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Verwendung von Javap zur Analyse von Java-String-Operationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen