Ich dachte nur, ich nehme ein Bad. In der Java-Sprache sind Literale die Werte des primitiven Typs, des String-Typs und des Null-Typs, die direkt im Code ausgedrückt werden. Primitive Typen haben andere Eigenschaften als Referenztypen, "deshalb kann nicht geholfen werden" (obwohl Sie das nicht sagen sollten), und Nulltypen sind auch "Null", sodass Sie diese Daten direkt beschreiben und verarbeiten können. Ich kann dir zustimmen. Warum gibt es dann ein Literal nur für String im Referenztyp? Warum? Warum ist es sinnlich? Ich dachte. Okay, lass es uns herausfinden.
Dies ist der Anfang aller Fehler, aber da es sich um eine Zeichenfolge "wörtlich" handelt (was "wörtlich" bedeutet), ist es die Zeichenfolge selbst. Aber "leer". Nicht null, aber "leer". "Sky" ist ein ziemlich wichtiges Konzept, nicht wahr? Ich glaube nicht, dass geschrieben steht, dass Sie verstehen können, warum das String-Literal vorbereitet wurde, selbst wenn Sie die String-Klasse besuchen. Aber ohne nachzudenken, drückte ich vage die Taste F3 und ging zur String-Klasse. Hallo. Eine Stunde meines Geheimnisses. Das erste, was einspringt
String.class
private final char value[];
Feld. Es ist ein invariantes Array von Zeichenwerten, in dem Zeichenfolgendaten vom Typ String gespeichert werden. Da die Sequenz und der Ablauf wichtig sind, spricht man von einer Sequenz. Ich habe zuerst gelernt, dass neue Daten generiert werden, wenn sie neu sind. Aus diesem Grund können Sie StringBuilder für modifizierbare Zeichenfolgen verwenden.
Als ich den Anfang der großen Anzahl von Konstrukteuren betrachtete, schien es wie "Ja", und ich war schon jetzt überrascht.
String.class
public String() {
this.value = "".value;
}
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
//Unten weggelassen
Was passiert mit this.value =" ". Value;
? ist.
Ich sehe, dass es mit String str =" ";
initialisiert wird, weil es eine leere Zeichenkette ist, und ich habe es vor langer Zeit gelernt und ich benutze es auch, aber wenn ich darüber nachdenke, denke ich, dass char c = '';
unmöglich ist. .. Ist es nicht möglich, eine Instanz zu erstellen, aber keinen Anfangswert zuzuweisen? ?? ??
Sample.java
String str = "";
System.out.println(str.length()); // 0
System.out.println(str.charAt(0)); // Exception!
Wenn Sie darüber nachdenken, ist der Anfangswert nicht enthalten. Ich kann es erzeugen, aber es ist kein Wert darin. Ich hatte einen Traum, dass es Daten enthielt, die als leere Zeichenkette bezeichnet wurden. Das war nicht der Fall. Nein, es gibt ein Zeichen, das nicht das Zeichen "leer" ist, aber es ist kein Zeichen, obwohl der Speicherbereich gesichert ist. Da die Daten als Zeichen "leer" sind, ist der Speicherbereich auch dann gesichert, wenn die Länge der Zeichenfolge 0 ist. Es gibt, aber es gibt kein Konzept von "leer". Es ist tiefgreifend. String.charAt () hat gerade aufgehört, StringIndexOutOfBoundsException zu flüstern. Okay, fordern Sie erneut heraus.
Sample.java
String str = "I love you.";
System.out.println(str.length()); // 11
str = "I love you." + "";
System.out.println(str.length()); // 11
Ja, die Saitenlänge ändert sich nicht. Natürlich. Weil es "leer" ist. Ich kehrte plötzlich zu mir zurück. Zum Beispiel kann "Punkt p = neuer Punkt ();" mit dem Anfangswert 0 sowohl für x als auch für y gesetzt werden, da es sich nicht um eine Sequenz handelt.
Die String-Klasse implementiert CharSequence, ebenso wie StringBuilder und StringBuffer. Wenn sie also eine Instanz erstellen, ohne dem Argument etwas zu geben, ist nur der Bereich zum Ablegen der Daten gesichert, und das ist das Merkmal des Arrays selbst. Es ist ein bisschen anders als String, aber ich wusste nicht, warum ich es nicht einfach generieren konnte. Ich schreibe das in Qual. Die Sammlung unterscheidet sich auch von einem Array, aber zuerst wird eine Instanz des Frameworks selbst wie List erstellt und später werden Daten eingegeben. Selbst wenn es eine leere Zeichenkette war, fühlte ich mich nicht entspannt, dass die Zeichenkette eine Zeichenkette sein würde (einige wichtige Daten). Warum hast du es vergessen? Das Fundament der Stiftung ist wichtig, nicht wahr? Ich war mir sehr bewusst. Gleichzeitig fühlte ich mich in diesem Jahrhundert am meisten enttäuscht.
Ich denke, dass die Initialisierung darin besteht, einen Wert zusammen mit einer Deklaration zuzuweisen. Selbst wenn die Daten einer eindeutigen Zeichenfolge nicht zugewiesen werden können, werden die Informationen einer Instanz von String generiert und vervollständigt. Ich denke, Initialisierung ist Initialisierung, aber dank des wunderbaren Konzepts "leer" Ich habe das Gefühl, dass es eine gewisse Initialisierungskomplexität enthält, die andere Instanzen nicht haben. Nun, da eine leere Zeichenfolge ein Literal einer Zeichenfolge ist, kann es sinnvoll sein, Informationen darüber zu haben, dass es sich um einen Zeichenfolgentyp (Zeichenfolgentyp) handelt, aber ich war in der Vergangenheit überzeugt. Eine der Implikationen der Zuweisung einer leeren Zeichenfolge, um "die Wahrscheinlichkeit einer Ausnahme aufgrund von Null zu verringern" (was ich wusste), ist derzeit nicht ganz richtig. Liegt es daran, dass Optional jetzt verfügbar ist? Die Verwendung ist jedoch seltsam, z. B. Optional zum Initialisieren einer Instanz mithilfe eines Zeichenfolgenliteral. Ich denke, Optional kann gut verwendet werden, wenn erwartet wird, dass der Rückgabewert einer Methode null ist. Ich bin nicht dankbar für einen solchen Ort. Im Gegenteil, es ist nur nervig. Wenn Sie Eclipse verwenden und versuchen, eine Variable zu verwenden, bevor sie initialisiert wurde, werden Sie wütend wie ein Dämon, und es scheint sinnlos, sie mit null oder einer leeren Zeichenfolge zu initialisieren. Ich ersetze eine leere Zeichenkette durch das Gefühl, dass es unangenehm ist, nur einen Wert zu deklarieren und nicht mehr einzugeben. null kann initialisiert werden, aber es ist null (nichts, keine Referenz), also fühlt es sich wie ein Mist an. Das ist schlecht.
@hiuchida kommentierte, dass der Spaß, nicht null von nicht null trennen zu müssen, wunderbar ist. Ich werde das Beispiel so veröffentlichen, wie es ist.
String empty = "";
for (char ch : empty.toCharArray()) {
Natürlich ist es anstrengend, sich immer der Null oder Nicht-Null bewusst zu sein. Wie Sie sagten, ist der Standpunkt, den Sie genießen können, auch wunderbar.
Es war Gudaguda, aber ich werde es so lassen, wie es ein Gebot ist, nicht wieder von demselben "Warum?" Dann machten wir uns auf den Weg, um einen vernünftigen Weg zu finden, leere Saiten zu verwenden.
Recommended Posts