Initialisierung mit einer leeren Zeichenfolge für eine Instanz vom Typ Java-Zeichenfolge

Was ist der String-Typ?

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.

Meine Umgebung

Schauen Sie sich vorerst den String-Typ an

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.

Reihenfolge

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.

Bedeutung der Initialisierung einer leeren Zeichenfolge einer Instanz vom Typ Zeichenfolge

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.

Immer auf die gleiche Weise (Postskriptum 2017-1-24)

@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.

Fazit

Was ich meinem Herzen geschworen habe

Recommended Posts

Initialisierung mit einer leeren Zeichenfolge für eine Instanz vom Typ Java-Zeichenfolge
Über Java-Instanzen
[Java] So konvertieren Sie ein Element eines Array vom Typ String in einen Int-Typ
[Java] Korrekter Vergleich des String-Typs
[Java] Konvertiert Null vom Objekttyp in String-Typ
Typkonvertierung vom Java Big Decimal-Typ zum String-Typ
Initialisierung von for Versuchen Sie, das Java-Problem in TypeScript 5-4 zu ändern
Ich war süchtig nach getXxxx von ResultSet, weil es ein primitiver Typ ist (Java)
[Java] Verboten, eine Art von Alphabet zu verwenden FizzBuzz [Bindung]
Eine nicht unterstützte Java-Version So beseitigen Sie Fehler
Verwendung des mit Tensorflow 2.0 trainierten Modells mit Kotlin / Java
Java zum Spielen mit Function
[Java] Eine Art von Alphabet verboten Mit Bindung Hallo, Welt! [Bindung]
Stellen Sie lokal entwickelte Java-Anwendungen mit Cloud Toolkit auf Alibaba Cloud ECS-Instanzen bereit
Konvertieren Sie den Zeichenfolgentyp in den Zeitstempeltyp
[Java] Um die Typinformationen der Typparameter zur Laufzeit zu kennen
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Was passiert mit Instanzvariablen beim Kopieren einer Instanz mit Ruby?
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
So erhalten Sie eine leere Anfrage mit Spring Web MVC @RequestBody
Umgang mit Instanzen
So entwickeln Sie eine App mit der Jersey Java RESTful API auf einer Alibaba Cloud ECS-Instanz
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen
[Einführung in Java] Umgang mit Zeichenfolgen (String-Klasse, StringBuilder-Klasse)
[Einführung in Java] Informationen zu Variablen und Typen (Variablendeklaration, Initialisierung, Datentyp)
Eine Geschichte über die Verbindung zu einem CentOS 8-Server mit einem alten Ansible
Die Geschichte von toString () beginnt mit der Übergabe eines Arrays an System.out.println
Verwandeln Sie ein Array von Strings in eine Liste von Ganzzahlen in Java
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
[Java] So konvertieren Sie vom Typ String in den Pfadtyp und erhalten den Pfad
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge
So ermitteln Sie die Länge einer Audiodatei mit Java
[Java] Geschwindigkeitsvergleich der Zeichenfolgenkombination
Erstellen Sie mit JAVA eine unveränderliche Klasse
Java mit Ramen lernen [Teil 1]
Wagen Sie es, Kaggle mit Java herauszufordern (1)
Ich habe versucht, mit Java zu interagieren
Java, Arrays für Anfänger
Führen Sie in Java8 geschriebene Anwendungen in Java6 aus
Verwendung des Java-Aufzählungstyps
[Einführung in das Java-Inhaltsverzeichnis] Ich habe Java mit anderen Sprachen verglichen (Interpretertyp, Compilertyp, dynamischer Typ, statischer Typ).
[Java] Geben Sie das Ergebnis von ffprobe -show_streams in JSON aus und ordnen Sie es einem Objekt in Jackson zu
[Java] So drehen Sie ein zweidimensionales Array mit einer erweiterten for-Anweisung
Verwenden Sie den statischen Initialisierungsblock, um die Liste / den Satz statischer Felder in Java zu initialisieren
So konvertieren Sie ein Array von Strings mit der Stream-API in ein Array von Objekten
Rufen Sie den Typ eines Elements eines Arrays ab, um festzustellen, ob es sich um ein Array handelt
[Java] So verwenden Sie Teilzeichenfolgen, um einen Teil einer Zeichenfolge auszuschneiden
[Java] [ibatis] So erhalten Sie 1-zu-N-Beziehungsdatensätze mit List <Map <>>
[Java] Wie man mit der String-Klasse an die Spitze eines bestimmten Strings kommt
Anmerkung: [Java] Identifizieren Sie Dateien mit einem Aktualisierungsdatum von 1 Tag oder weniger
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Grundlagen der Java-Programmierung - Ich möchte ein Dreieck mit einer for-Anweisung ② anzeigen
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]
<Java> Quiz zum Batch-Konvertieren von Dateinamen, die durch eine bestimmte Zeichenfolge mit einem Teil des Dateinamens getrennt sind
So beschneiden Sie ein Bild in libGDX
[Java] Implizite Typumwandlung (AOJ10-Summe von Zahlen)
Lassen Sie uns eine Instanz mit .new selbst erstellen. .. ..