String-Initialisierung in Java

Blog

Erfahren Sie mehr über den Unterschied zwischen Deklaration und Initialisierung von String in Java.



1. Einleitung

Java* String *ist eine der wichtigsten Klassen und wir haben bereits viele ihrer Aspekte in unserem Zeichenfolge -bezogene Reihe von Tutorials .

In diesem Tutorial konzentrieren wir uns auf Zeichenfolge Initialisierung in Java.



2. Schöpfung

Zuerst sollten wir uns erinnern, wie Zeichenfolge s werden in Java erstellt.

Wir können die nutzen Neu Schlüsselwort oder die Literal-Syntax:



String usingNew = new String('baeldung'); String usingLiteral = 'baeldung';

Und es ist auch wichtig, dass wir verstehen, wie Zeichenfolge s werden in einem Pool verwaltet .

c#-Aufrufmethode aus einer anderen Klasse

3. Zeichenfolge Nur Erklärung

Lass uns zuerst einfach erklären zu Zeichenfolge , ohne explizit einen Wert zuzuweisen.

Wir können dies entweder lokal oder als Membervariable tun:

public class StringInitialization { String fieldString; void printDeclaredOnlyString() { String localVarString; // System.out.println(localVarString); -> compilation error System.out.println(fieldString); } }

Wie wir sehen, erhalten wir einen Kompilierungsfehler, wenn wir versuchen, *localVarString * zu verwenden, bevor wir ihm einen Wert geben. Auf der anderen Seite zeigt die Konsole Null zum fieldString 's Wert.

Sehen, Membervariablen werden mit einem Standardwert initialisiert Wenn die Klasse aufgebaut ist, Null in Zeichenfolge s Fall. Aber, wir müssen lokale Variablen selbst initialisieren.

ubuntu vs himbeer pi os

Wenn wir *localVarString *einen Wert von Null , wir werden sehen, dass die beiden jetzt tatsächlich gleich sind:

String localVarString = null; assertEquals(fieldString, localVarString);

Vier. Zeichenfolge Initialisierung mit Literalen

Lass uns jetzt zwei erstellen Zeichenfolge s mit dem gleichen Literal:

String literalOne = 'Baeldung'; String literalTwo = 'Baeldung';

Wir bestätigen, dass nur ein Objekt erstellt wird, indem wir die Referenzen vergleichen:

assertTrue(literalOne == literalTwo);

Der Grund dafür liegt darin, dass Zeichenfolge s werden in einem Pool gespeichert . ***literalOne **fügt den *String *baeldung zum Pool hinzu und *literalTwo verwendet es wieder.

5. Zeichenfolge Initialisierung mit Neu

Wir werden jedoch ein anderes Verhalten sehen, wenn wir das Schlüsselwort *new * verwenden.

Wie kaufe ich eine Polkadot-Münze in New York?
String newStringOne = new String('Baeldung'); String newStringTwo = new String('Baeldung');

Obwohl der Wert von beiden Zeichenfolge s wird wie zuvor sein, wir müssen dieses Mal verschiedene Objekte verwenden:

assertFalse(newStringOne == newStringTwo);

6. Leer Zeichenfolge S

Lassen Sie uns jetzt drei leere erstellen Zeichenfolge S:

String emptyLiteral = ''; String emptyNewString = new String(''); String emptyNewStringTwo = new String();

Wie wir mittlerweile wissen, das leerLiteral wird hinzugefügt Zeichenfolge Pool, während die anderen beiden direkt auf den Haufen gehen.

Obwohl diese werden nicht die gleichen Objekte sein, alle werden den gleichen Wert haben :

assertFalse(emptyLiteral == emptyNewString) assertFalse(emptyLiteral == emptyNewStringTwo) assertFalse(emptyNewString == emptyNewStringTwo) assertEquals(emptyLiteral, emptyNewString); assertEquals(emptyNewString, emptyNewStringTwo);

7. Null Werte

Mal sehen, wie null Zeichenfolge s verhalten.

Lassen Sie uns eine Null deklarieren und initialisieren Zeichenfolge :

So erstellen Sie ein Popup in HTML mit CSS
String nullValue = null;

Wenn wir gedruckt haben nullWert , würden wir das Wort null sehen, wie wir es zuvor gesehen haben. Und wenn wir versuchen würden, Methoden auf *nullValue aufzurufen, *bekommen wir a NullPointerException, wie erwartet.

Aber, warum wird null gedruckt? Was ist Null Genau genommen?

Also, die JVM-Spezifikation sagt, dass Null ist der Standardwert für alle Referenzen, ist also nicht speziell an die Zeichenfolge . Und tatsächlich schreibt die Spezifikation keine konkrete Wertcodierung für . vor Null .

** Also, woher kommt null zum Drucken einer * Zeichenfolge * dann?

Wenn wir einen Blick auf die werfen PrintStream#println Implementierung, wir werden sehen, wie es ruft String#valueOf :

Vermietung von Elektrorollern
public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } }

Und,** wenn wir uns *String#valueOf ansehen, * wir bekommen unsere antwort:

public static String valueOf(Object obj) { return (obj == null) ? 'null' : obj.toString(); }

Und das ist offensichtlich der Grund für null.

8. Fazit

In diesem Artikel haben wir untersucht Zeichenfolge Initialisierung. Wir haben den Unterschied zwischen Deklaration und Initialisierung erklärt. Wir haben auch die Verwendung angesprochen Neu und unter Verwendung der Literal-Syntax.

Schließlich haben wir uns angesehen, was es bedeutet, a . zuzuweisen Null Wert zu a Zeichenfolge , wie zum Null Wert im Speicher dargestellt wird und wie er aussieht, wenn wir ihn drucken.

Alle im Artikel verwendeten Codebeispiele sind verfügbar drüben auf Github .

#java #string

www.baeldung.com

String-Initialisierung in Java

Erfahren Sie mehr über den Unterschied zwischen Deklaration und Initialisierung von String in Java.