In Java ist diese Aussage offensichtlich falsch. IDEs wie Eclipse sagen dir das:
kann nicht von String in StringBuilder
konvertiert werden
Allerdings könnte ein String
-Objekt von =
operator initialisiert werden.
Ich möchte einige Gründe kennen, die mit der Speicherzuweisung zusammenhängen.
Denn StringBuilder
ist ein Objekt und muss es konstruiert sein. Sie erhalten den Fehler, weil String nicht a StringBuilder
ist.
String ist ein spezieller String, der zwischen primitiv und class 1 liegt. Sie können ein Zeichenfolgenliteral direkt einer String-Variablen zuweisen, anstatt den Konstruktor aufzurufen, um eine String-Instanz zu erstellen.
Die Designer von Java entschieden, primitive Typen in einem zu behalten objektorientierte Sprache, anstatt alles zu einem Objekt zu machen um die Leistung der Sprache zu verbessern. Primitive werden gespeichert im Call-Stack, die weniger Speicherplatz benötigen und billiger sind manipulieren. Auf der anderen Seite werden Objekte im Programm gespeichert Heap, die eine komplexe Speicherverwaltung und mehr Speicherplatz benötigen.
Aus Performancegründen ist der Java-String so konzipiert, dass er zwischen a Primitiv und eine Klasse.
Mehr lesen:
"xxx"
ist definiert als ein String-Literal durch die Angabe der Sprache * und ist ein String-Objekt. So können Sie schreiben:
Aber ein String ist kein StringBuilder ...
* Zitat aus der JLS: "Ein String-Literal hat immer den Typ String
"
Das funktioniert
%Vor%, weil Sie einen Verweis auf ein String-Literal haben, das einer Variablenreferenz zugewiesen ist. d.h. die Typen sind gleich.
Sie können dies nicht implizit Typen konvertieren oder ein Objekt mit Zuweisung in Java ändern.
%Vor%Funktioniert, weil der String ein Objekt ist.
String ist nicht nur eine Klasse, sondern alles innerhalb von ""
ist ein JVM-String und ein String-Objekt verweist auf diesen String.
So funktioniert String str="hello"
.
Aber StringBuilder und andere Tausende von Objekten sind nicht so speziell wie String
, also werden sie auch nicht initialisiert.
In Java ist der String ein spezieller Typ von Klasse Sie können ein Objekt für String wie
definieren %Vor%oder
%Vor%Aber StringBuilde ** r ist genau wie eine ** normale Klasse und wenn Sie ein Objekt dafür erstellen müssen, sollten Sie das new Schlüsselwort verwenden (Konstruieren Sie das Objekt) . HTH
Tags und Links java stringbuilder