Der von JAVA bereitgestellte „“-Operator, wie z. B. Iteger String, aus C-Perspektive, ich möchte immer herausfinden, wie JAVA diesen „“-Operator überlastet, also bin ich in die String-Klasse gegangen, um nachzusehen, aber ich habe nichts gefunden. Sie denken also darüber nach, wie JAVA das macht? Lassen Sie uns Schritt für Schritt analysieren, wie JAVA die „Operatorüberladung“ implementiert.
Beispiel
public class Example { public static void main(String[] args) { Integer a = null; String b = a + "456"; System.out.println(b); } }
Dieses Programm ist sehr einfach und ist ein „ “-Operationsausdruck von Integer und String. Laufergebnis: null456
Beispielprogramm dekompilieren
Befehl:
javap -c Example
Das dekompilierte Ergebnis lautet wie folgt:
Compiled from "Example.java" public class com.boyu.budmw.test.Example extends java.lang.Object{ public com.boyu.budmw.test.Example(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: aconst_null 1: astore_1 2: new #2; //class java/lang/StringBuilder 5: dup 6: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V 9: aload_1 10: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder; 13: ldc #5; //String 456 15: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 18: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 21: astore_2 22: getstatic #8; //Field java/lang/System.out:Ljava/io/PrintStream; 25: aload_2 26: invokevirtual #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 29: return }
Lassen Sie es uns analysieren Hauptfunktionsteil:
0: Schiebe die Konstante null in den Operandenstapel
1: Entferne die Null aus dem Operandenstapel und speichere sie in der lokalen Variablen a mit Index 1
2: neuer StringBuilder
5: Kopieren Sie den zuvor von new erstellten Platz und schieben Sie ihn in den Operandenstapel
6: Aufruf zur Initialisierung
9: Speichern Sie den Ergebnis an den Operandenstapel
10: StringBuilder.append(java/lang/Object) aufrufen
13: „456“ an die Spitze des Stapels schieben
15: StringBuilder .append(java/lang/String)
18: toString-Funktion ausführen
Aus der obigen Analyse können wir erkennen, dass schließlich zuerst ein StringBuilder-Objekt und dann der Operator „ “ generiert wird Alles wird durch den Aufruf von StringBuilder.append() erledigt. Dies kann erklären, warum das obige Beispielprogramm nach der Ausführung null456 ist. Beim Anhängen des Objekts wird
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
aufgerufen, um das Objekt in einen String zu konvertieren.
Warum unterstützt JAVA keine Operatorüberladung?
Klassen wie C-Überladungsoperatoren Ich persönlich denke, dass es ein schwieriges Problem für Betrieb und Wartung sein wird, da es keinen Standard gibt, der die Operatorüberladung einschränkt und jeder kann davon ausgehen, dass eine Überladung einen großen Unterschied in der Semantik verursacht und die Lesbarkeit erheblich beeinträchtigt. Daher steht die Funktion zum Entfernen der Operatorüberladung in Java im Einklang mit seiner fortgeschrittenen objektorientierten Natur. Verweilen Sie also nicht bei diesem Thema.
Postscript
Dies sind einige Dinge, die während des Entwicklungsprozesses häufig verwendet werden. Wir gehen jedoch möglicherweise nicht so tief in die Materie ein. Sie können es versuchen Untersuchen Sie diese verschiedenen Dinge später weiter. Ein kleiner Fall wurde entdeckt.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.