Java Zahlen ↔ String-Konvertierung: parseInt, valueOf, toString und häufige Fallstricke

.## 1. Grundlegendes Wissen zur Umwandlung zwischen Zahlen und Zeichenketten in Java

Beim Entwickeln in Java stößt man unweigerlich auf Situationen wie „Daten, die wie eine Zahl aussehen, aber als Zeichenkette behandelt werden“ oder „Werte, die als Zeichenketten empfangen werden und die man als Zahlen berechnen möchte“. Beispielsweise kommen Formulareingaben, CSV‑Importe, API‑Antworten und Log‑Ausgaben häufig als Zeichenketten, selbst wenn sie numerisch wirken.
In diesem Abschnitt strukturieren wir, warum Umwandlungen nötig sind und welche Punkte Anfängern typischerweise Schwierigkeiten bereiten.

目次

1.1 Warum Umwandlungen notwendig werden

Java‑Programme behandeln den Datentyp (type) explizit. In der Praxis werden Eingaben und Ausgaben jedoch häufig zu „Zeichenketten“, zum Beispiel:

  • Benutzereingabe : Auch wenn man „123“ in ein Textfeld tippt, erhält das Programm im Grunde eine Zeichenkette
  • Dateien (CSV / JSON / Konfigurationsdateien) : Beim Einlesen bekommt man oft Werte als Zeichenketten
  • HTTP/API : Viele Werte werden als Zeichenketten übergeben (oder der JSON‑Typ ist mehrdeutig)
  • Anzeige und Logs : Statt Zahlen unverändert auszugeben, konvertiert man sie häufig in Zeichenketten und formatiert sie

Deshalb treten in der Praxis häufig zwei Richtungen der Umwandlung auf:

  • Zahl → Zeichenkette : UI‑Anzeige, Logs, Meldungen, Verkettung usw.
  • Zeichenkette → Zahl : Berechnungen, Vergleiche, Bereichsprüfungen, Aggregationen usw.

Wichtig ist dabei: Selbst wenn etwas numerisch aussieht, bedeuten unterschiedliche Typen unterschiedliche Dinge.

  • "10" (Zeichenkette) und 10 (Zahl) sehen gleich aus, sind aber im Code verschiedene Typen
  • Zeichenkette "10" + "2" wird zu "102" (Verkettung)
  • Zahl 10 + 2 wird zu 12 (Addition)

Fehler wie „Ich dachte, ich addiere, aber es wurde zu einer Zeichenkettenverkettung“ passieren leicht, wenn man diese Unterscheidung nicht im Kopf behält.

1.2 Java ist streng bezüglich Typen

Java ist eine statisch typisierte Sprache, daher führen Operationen mit nicht passenden Typen in der Regel zu einem Kompilierungsfehler. Das erhöht die Sicherheit, aber beim Wechsel zwischen Zeichenketten und Zahlen muss man die richtigen Umwandlungen vornehmen.

Zum Beispiel: Wenn man versucht, eine Zeichenkette direkt als Zahl zu verwenden, erhält man einen Fehler.

  • Man will mit der Zeichenkette "123" als int rechnen → Man muss sie vorher in int umwandeln

Außerdem kennt Java zwei Arten von numerischen Typen: Primitive Typen und Wrapper‑Klassen, was häufig zu Verwirrung führt.

  • Primitive Typen: int, long, double usw. (leichtgewichtig, reine Zahlen)
  • Wrapper‑Klassen: Integer, Long, Double usw. (Zahlen als Objekte)

Beispiel: Integer.valueOf("123") liefert ein Integer‑Objekt, während Integer.parseInt("123") ein int (primitive) zurückgibt.
Wir behandeln diesen Unterschied im nächsten Abschnitt genauer, aber Anfängern fällt oft auf, dass „die gleiche Umwandlung unterschiedliche Typen zurückgibt“.

1.3 Unterschiede zwischen automatischer und expliziter Umwandlung

Wenn man „Umwandlung“ hört, stellt man sich vielleicht vor, Java erledige das automatisch. Tatsächlich gibt es Verhaltensweisen, die in manchen Fällen wie eine automatische Umwandlung wirken.

Ein typisches Beispiel ist die Zeichenkettenverkettung.

  • Wenn man "Total: " + 10 schreibt, scheint die 10 automatisch in eine Zeichenkette umgewandelt zu werden

Das ist zwar praktisch, kann aber auch zu unerwarteten Ergebnissen führen.

  • "10" + 2"102" (Zeichenkettenverkettung, keine numerische Addition)

Java hat also Fälle, in denen Werte implizit zu Zeichenketten werden, aber Zeichenkette → Zahl wird grundsätzlich nicht automatisch konvertiert.
Mit anderen Worten:

  • Zahl → Zeichenkette : kann in manchen Kontexten implizit geschehen (z. B. bei Verkettung)
  • Zeichenkette → Zahl : erfordert immer eine explizite Umwandlung (z. B. parseInt)

Sich das zu merken, hält einen sicher.

Außerdem sind Eingaben beim Konvertieren von Zeichenketten zu Zahlen nicht immer gültig.

  • Leere Zeichenkette ""
  • Leerzeichen " 123 "
  • Kommagetrennt "1,000"
  • Versuch, einen Dezimalwert "12.34" in ein int zu konvertieren
  • Nicht‑numerische Zeichen "12a"

In solchen Fällen tritt eine Laufzeit-Ausnahme (typischerweise NumberFormatException) auf.
In realen Systemen ist es entscheidend, unter der Annahme zu entwerfen, dass „ungültige Eingaben eintreffen können“.

2. Wie man Zahlen in Strings umwandelt

In diesem Abschnitt erklären wir die gängigsten Wege, Zahlen in Strings in Java umzuwandeln, sowie wie man sich für sie entscheidet.
Diese Umwandlung wird ständig in Logs, UI-Ausgaben und Nachrichtenaufbau verwendet.

2.1 Verwendung von String.valueOf() (Am häufigsten)

Zur Umwandlung von Zahlen in Strings ist der sicherste und am meisten empfohlene Ansatz String.valueOf().

int i = 100;
String s = String.valueOf(i);

Es unterstützt nicht nur int, sondern auch long, double, float, boolean und fast alle primitiven Typen.

double d = 12.34;
String s = String.valueOf(d);

Wichtige Merkmale dieses Ansatzes:

  • Konsistente Syntax, die leicht zu merken ist
  • Funktioniert mit primitiven Typen und Wrapper-Klassen
  • Hohe Lesbarkeit
  • Klare Absicht („das ist eine String-Umwandlung“ auf einen Blick)

Es wandelt auch Wrapper-Objekte sicher in Strings um.

Integer num = null;
String s = String.valueOf(num); // "null"

Auch wenn Sie null übergeben, wirft es keine NullPointerException, was besonders nützlich für Logging ist.

2.2 Verwendung von Integer.toString() / Double.toString()

Jede numerische Wrapper-Klasse bietet eine toString()-Hilfsmethode.

int i = 100;
String s = Integer.toString(i);
double d = 12.34;
String s = Double.toString(d);

Das funktioniert korrekt, hat aber diese Merkmale:

  • Die Methode unterscheidet sich je nach Typ (Integer / Double / Long usw.)
  • Es ist etwas mühsam, sie alle zu merken
  • Weniger universell als String.valueOf()

Deshalb wird in realen Projekten oft String.valueOf() bevorzugt, es sei denn, Sie möchten einen spezifischen Typ explizit betonen.

2.3 Vorsicht beim Aufrufen von toString() auf Objekten

Sie können auch direkt toString() auf Wrapper-Objekten oder Ihren eigenen Objekten aufrufen.

Integer i = 100;
String s = i.toString();

Das funktioniert, aber Sie müssen vorsichtig sein, wenn null möglich ist.

Integer i = null;
String s = i.toString(); // NullPointerException

Wenn das Objekt null ist, verursacht das einen Laufzeitfehler.
Aus Sicherheitsgründen ist String.valueOf() in Fällen wie diesen besser geeignet:

  • Log-Ausgabe
  • Debug-String-Generierung
  • Code-Pfade, in denen null auftreten kann

2.4 Sollten Sie „+ „““ für die Umwandlung verwenden?

Sie haben vielleicht Code wie diesen gesehen:

int i = 100;
String s = i + "";

Ja, es wandelt eine Zahl in einen String um. Allerdings ist dies kein empfohlener Ansatz.

Gründe:

  • Die Absicht ist nicht auf einen Blick offensichtlich
  • Es ist unklar, ob es sich um Konkatenation oder Umwandlung handelt
  • Oft unbeliebt in Code-Reviews
  • Wahrscheinlicher, Missverständnisse bei zukünftigen Änderungen zu verursachen

Es kann in kurzen Demos oder schnellen Tests auftreten, aber es ist am besten zu vermeiden für wartbaren Code.

2.5 Zusammenfassung: Wie man Number → String Umwandlung wählt

Um Verwirrung in der realen Arbeit zu vermeiden, merken Sie sich das:

  • Standardwahl: String.valueOf()
  • Wenn Sie den Typ betonen möchten: Integer.toString() / Double.toString()
  • Aufruf von toString() auf Objekten erfordert Null-Bewusstsein
  • Vermeiden Sie + „“ grundsätzlich

3. Wie man Strings in Zahlen umwandelt

Ab hier erklären wir das besonders wichtige Thema in realen Projekten: Umwandlung von Strings in Zahlen.
Da Benutzereingaben und externe Daten nicht garantiert gültig sind, ist das Verständnis von Umwandlungsmethoden und Fallstricken essenziell.

3.1 Verwendung von Integer.parseInt() (Am grundlegendsten)

Eine repräsentative Methode zur Umwandlung eines Strings in einen int ist Integer.parseInt().

String s = "123";
int i = Integer.parseInt(s);

Diese Methode gibt den primitiven Typ int zurück, was bequem ist, wenn Sie sofort Berechnungen oder Vergleiche durchführen möchten.

int total = Integer.parseInt("10") + Integer.parseInt("20");
// total is 30

Allerdings verursacht das Übergeben von Strings wie den folgenden eine Laufzeit-Ausnahme.

.* "abc" * "" (leere Zeichenkette) * "12.3" (Dezimalzahl) * "1,000" (mit Kommas)

int i = Integer.parseInt("abc"); // NumberFormatException

Diese Ausnahme wird nicht zur Compile‑Zeit erkannt – sie tritt zur Laufzeit auf, daher müssen Sie vorsichtig sein.

3.2 Verwendung von Integer.valueOf()

Integer.valueOf() ist eine weitere gängige Methode, um einen String in eine Zahl zu konvertieren.

String s = "123";
Integer i = Integer.valueOf(s);

Der größte Unterschied zu parseInt() besteht darin, dass der Rückgabetyp Integer (eine Wrapper‑Klasse) ist.

  • parseInt()int
  • valueOf()Integer

Dieser Unterschied ist in folgenden Szenarien relevant:

  • Werte in Sammlungen (List / Map) speichern
  • Entwürfe, die Nullwerte behandeln
  • Wenn Sie den Wert als Objekt behandeln möchten

Intern wirft valueOf() ebenfalls NumberFormatException, wenn die Konvertierung fehlschlägt. Es ist also nicht „weniger fehleranfällig“ als parseInt().

3.3 Wie man zwischen parseInt und valueOf wählt

Wenn Sie unsicher sind, welche Sie verwenden sollen, helfen diese Kriterien:

  • Wenn das Ziel Berechnung oder Vergleich ist → parseInt()
  • Wenn Sie es als Objekt behandeln möchten → valueOf()

Da modernes Java Autoboxing unterstützt, ist der praktische Unterschied geringer, aber es ist dennoch wichtig, die Gewohnheit zu entwickeln, basierend auf dem Rückgabetyp zu wählen.

3.4 Konvertieren in andere numerische Typen wie double / long

Oft müssen Sie Strings in andere Typen als Integer konvertieren.

long l = Long.parseLong("100000");
double d = Double.parseDouble("12.34");

Die Grundregeln sind dieselben:

  • Long.parseLong()long
  • Double.parseDouble()double
  • Float.parseFloat()float

Alle werfen NumberFormatException, wenn der String nicht konvertiert werden kann.

Ein häufiger Stolperstein ist der Versuch, einen Dezimal‑String in einen Integer‑Typ zu konvertieren:

int i = Integer.parseInt("12.34"); // exception

In diesem Fall benötigen Sie ein Design, das den Wert von Anfang an als double behandelt.

3.5 Vorsicht bei führenden / nachgestellten Leerzeichen

Benutzereingaben enthalten häufig unbeabsichtigt Leerzeichen.

String s = " 123 ";
int i = Integer.parseInt(s); // exception

In solchen Fällen ist es üblich, vor der Konvertierung trim() zu verwenden.

int i = Integer.parseInt(s.trim());

Allerdings wird selbst nach trim() eine Ausnahme ausgelöst, wenn nicht‑numerische Zeichen verbleiben.

3.6 Zusammenfassung: Wichtige Punkte für die String → Zahl Konvertierung

Um Strings sicher in Zahlen zu konvertieren, beachten Sie folgende Punkte:

  • Externe Eingaben immer misstrauen
  • Design so, dass Ausnahmen auftreten können
  • Den numerischen Typ klar festlegen (int / long / double)
  • Bei Bedarf vorverarbeiten (trim, usw.)

4. Konvertierungen mit BigDecimal und BigInteger (Finanzen / Präzisionsberechnungen)

Die bisher vorgestellten Typen int und double sind praktisch, aber Sie müssen vorsichtig sein, wenn die Berechnungsgenauigkeit kritisch ist. Besonders bei Geld, Mengen und Zinsen werden BigDecimal und BigInteger eingesetzt, um Rundungs‑ und Präzisionsprobleme zu vermeiden.

4.1 Warum double nicht ausreicht

Da double ein Gleitkommatyp ist, wird er intern als Binär‑Annäherung gespeichert. Infolgedessen kann folgendes Verhalten auftreten:

double d = 0.1 + 0.2;
System.out.println(d); // 0.30000000000000004

Das ist kein Bug – es ist beabsichtigt. Es mag geringfügig erscheinen, kann aber in folgenden Fällen fatal sein:

  • Geldberechnungen
  • Abrechnungs‑ und Abwicklungsvorgänge
  • Kumulative Berechnungen von Zinssätzen oder Verhältnissen

In solchen Fällen benötigen Sie einen Typ, der keinen Gleitkomma‑Fehler einführt.

4.2 String → Zahl Konvertierung mit BigDecimal

Bei BigDecimal gilt die Regel: aus einem String erstellen.

BigDecimal bd = new BigDecimal("12.34");

Ein Muster, das Sie vermeiden sollten, ist:

BigDecimal bd = new BigDecimal(12.34); // not recommended

Da das ursprüngliche double bereits einen Annäherungsfehler enthält, wird dieser beim Konvertieren zu BigDecimal weitergetragen.

Denken Sie daran: immer BigDecimal aus einem String erstellen.

4.3 Konvertierung von Zahlen zu Strings (BigDecimal)

Um BigDecimal in einen String umzuwandeln, ist es üblich, toString() zu verwenden.

BigDecimal bd = new BigDecimal("12.3400");
String s = bd.toString(); // "12.3400"

Wenn Sie Anzeigeformatierung wünschen, können Sie DecimalFormat verwenden, aber die Best Practice ist, die interne Verarbeitung von der Anzeigeformatierung zu trennen.

4.4 Wann BigInteger verwenden

BigInteger wird verwendet, um sehr große Ganzzahlen zu handhaben.

BigInteger bi = new BigInteger("12345678901234567890");

Typische Anwendungsfälle:

  • Zahlen mit extrem großen Stellenanzahlen
  • Numerische Darstellung von IDs oder Hash-Werten
  • Ganzzahlfunktionen, die den Bereich von long überschreiten

Es ist weniger üblich in typischen Geschäftsanwendungen, aber effektiv, wenn Sie Ganzzahlen mit unbekannten oder unbegrenzten Grenzen handhaben müssen.

4.5 Zusammenfassung: Wie man über BigDecimal / BigInteger nachdenkt

  • Geld / präzisionskritische Berechnungen → BigDecimal
  • Riesige Ganzzahlen → BigInteger
  • BigDecimal sollte aus String erstellt werden
  • Formatierung von Berechnungen trennen

5. Häufige Fehler bei der Konvertierung und wie man sie handhabt

Beim Konvertieren von Strings in Zahlen müssen Sie annehmen, dass Fehler immer passieren können.
In diesem Abschnitt organisieren wir häufige Ausnahmen und sichere Handhabungsansätze.

5.1 Was ist NumberFormatException?

NumberFormatException ist eine Laufzeit-Ausnahme, die geworfen wird, wenn ein String nicht als Zahl interpretiert werden kann.

int i = Integer.parseInt("abc"); // NumberFormatException

Diese Ausnahme wird nicht zur Compile-Zeit erkannt – sie erscheint nur, wenn der Code läuft.
Daher müssen Sie, wenn die Eingabe von außen kommt (Formulare, Dateien, APIs usw.), immer damit rechnen.

Häufige Ursachen umfassen:

  • Enthält nicht-numerische Zeichen
  • Leerer String oder null
  • Versuch, eine Dezimalzahl in einen Ganzzahltyp umzuwandeln
  • Enthält Kommas oder Symbole (z. B. „1,000“)

5.2 Grundlegende Handhabung mit try-catch

Der grundlegendste Ansatz ist, try-catch zu verwenden, um die Ausnahme abzufangen.

try {
    int i = Integer.parseInt(input);
} catch (NumberFormatException e) {
    // Handling when conversion fails
}

Schlüsselpunkte:

  • Handhabt den Fehlerpfad zuverlässig
  • Macht das Fehlverhalten explizit
  • Am häufigsten in realen Projekten verwendet

Kombiniert mit Logging und Fehlermeldungen ermöglicht dies sichere Verarbeitung.

5.3 Ein Vorab-Check-Ansatz, um Ausnahmen zu vermeiden

Abgesehen von der Ausnahmehabe können Sie auch vorher validieren, ob es numerisch ist.

boolean isNumber = input.matches("\\d+");

Mit einem Regex können Sie überprüfen, ob der String nur Ziffern enthält. Allerdings gibt es wichtige Einschränkungen:

  • Schwer, Dezimal- und Negativzahlen zu unterstützen
  • Kann komplex werden
  • Bietet keine vollständige Garantie

Daher ist es in der Praxis realistisch, try-catch als letztes Sicherheitsnetz zu behandeln.

5.4 Vorsicht mit null und leeren Strings

Vor der numerischen Konvertierung ist es wichtig, auf null oder leere Strings zu prüfen.

if (input == null || input.isEmpty()) {
    // Error handling
}

Diese Prüfung zu überspringen kann zu Ausnahmen oder unerwartetem Verhalten führen.
Leere Strings sind besonders häufig in Formulareingaben und Konfigurationsdateien.

5.5 Zusammenfassung: Wie man über Fehlerbehandlung nachdenkt

  • Externe Eingaben als potenziell ungültig behandeln
  • try-catch verwenden, um Ausnahmen zuverlässig abzufangen
  • Vorab-Prüfungen als ergänzende Validierung verwenden
  • null und leere Strings früh ausschließen

6. Empfohlene Konvertierungsmethoden nach Anwendungsfall

Bisher haben wir die Hauptwege abgedeckt, um zwischen Zahlen und Strings in Java umzuwandeln.
In diesem Abschnitt organisieren wir die anwendungsfallbasierte Denkweise, damit Sie in der realen Entwicklung nicht zögern.

6.1 UI-Anzeige und Log-Ausgabe

Für UI-Anzeige und Logs stehen Sicherheit und Lesbarkeit an erster Stelle.

Empfohlen:

  • Zahl → String: String.valueOf()
  • Sogar wenn ein Objekt involviert sein könnte, String.valueOf() verwenden
    log.info("count=" + String.valueOf(count));
    

.

Even if null can appear, it prevents exceptions.
Selbst wenn null auftreten kann, verhindert es Ausnahmen.

6.2 Calculations and Comparisons

6.2 Berechnungen und Vergleiche

For calculations and comparisons, the basic rule is to convert to numeric types as early as possible.
Für Berechnungen und Vergleiche gilt die Grundregel, so früh wie möglich in numerische Typen zu konvertieren.

  • String → Number: parseInt() / parseLong() / parseDouble()
  • String → Zahl: parseInt() / parseLong() / parseDouble()
  • After conversion, complete processing using numeric types
  • Nach der Konvertierung die Verarbeitung vollständig mit numerischen Typen durchführen
    int price = Integer.parseInt(inputPrice);
    int total = price * quantity;
    

Continuing to process as strings can cause subtle bugs.
Weiterhin als Strings zu verarbeiten kann subtile Fehler verursachen.

6.3 Form Inputs and External Data Processing

6.3 Formulareingaben und externe Datenverarbeitung

Treat user input and external data under the assumption that invalid values will arrive.
Behandle Benutzereingaben und externe Daten unter der Annahme, dass ungültige Werte eintreffen werden.

  • null / empty string checks
  • null / leere Zeichenketten prüfen
  • Exception handling via try-catch
  • Ausnahmebehandlung mittels try-catch
  • Return error messages as needed
  • Fehlermeldungen bei Bedarf zurückgeben
    try {
        int age = Integer.parseInt(input);
    } catch (NumberFormatException e) {
        // Input error handling
    }
    

Avoid writing “only the happy path”—think about error paths first.
Vermeide es, nur den „Happy Path“ zu schreiben – denke zuerst an Fehlerpfade.

6.4 Money and Precision-Critical Processing

6.4 Geld- und präzisionskritische Verarbeitung

For money, rates, and other cases where floating-point error is not acceptable, use BigDecimal.
Für Geld, Zinsen und andere Fälle, in denen Gleitkommafehler nicht akzeptabel sind, verwende BigDecimal.

  • String → BigDecimal: new BigDecimal(String)
  • Separate display formatting from calculations
  • Trenne die Anzeigeformatierung von Berechnungen
    BigDecimal amount = new BigDecimal(inputAmount);
    

The key is not to go through double.
Der Schlüssel ist, nicht über double zu gehen.

6.5 Storing in Collections or Handling as Objects

6.5 Speicherung in Collections oder Behandlung als Objekte

When storing values in a List or Map, or when your design handles null, wrapper classes are suitable.
Beim Speichern von Werten in einer List oder Map oder wenn dein Design null behandelt, sind Wrapper‑Klassen geeignet.

  • Integer.valueOf()
  • Long.valueOf()
    List<Integer> list = new ArrayList<>();
    list.add(Integer.valueOf("10"));
    

6.6 Use-Case Summary

6.6 Anwendungsfall‑Zusammenfassung

Summarized by use case:
Zusammengefasst nach Anwendungsfall:

  • Display / logs → String.valueOf()
  • Anzeige / Logs → String.valueOf()
  • Calculations → parseXxx()
  • Berechnungen → parseXxx()
  • Money / precision → BigDecimal
  • Geld / Präzision → BigDecimal
  • External input → design for exceptions
  • Externe Eingaben → Design für Ausnahmen
  • Collections → valueOf()

7. Common Mistakes and Anti-Patterns

7. Häufige Fehler und Anti-Patterns

Converting between numbers and strings is basic, but both beginners and experienced developers can make mistakes.
Die Umwandlung zwischen Zahlen und Zeichenketten ist grundlegend, aber sowohl Anfänger als auch erfahrene Entwickler können Fehler machen.
This section summarizes anti-patterns you should avoid in real projects.
Dieser Abschnitt fasst Anti‑Patterns zusammen, die du in realen Projekten vermeiden solltest.

7.1 Trying to Calculate While Keeping Strings

7.1 Versuch zu berechnen, während Strings beibehalten werden

This code looks plausible but is risky:
Dieser Code sieht plausibel aus, ist aber riskant:

String a = "10";
String b = "20";
String result = a + b; // "1020"

This is not calculation—it’s string concatenation.
Das ist keine Berechnung – es ist String‑Verkettung.
For numeric calculations, convert to numeric types first:
Für numerische Berechnungen zuerst in numerische Typen konvertieren:

int result = Integer.parseInt(a) + Integer.parseInt(b); // 30

7.2 Overusing “+ „“” Conversion

7.2 Übermäßige Verwendung von “+ „“” Konvertierung

String s = value + "";

It works, but the intent is unclear and maintainability is low, so it’s not recommended.
Es funktioniert, aber die Absicht ist unklar und die Wartbarkeit gering, daher wird es nicht empfohlen.

  • Likely to be called out in code reviews
  • Wird wahrscheinlich in Code‑Reviews beanstandet
  • Confuses readers later
  • Verwirrt Leser später
  • Ambiguous whether it’s conversion or concatenation
  • Unklar, ob es sich um Konvertierung oder Verkettung handelt

Using String.valueOf() explicitly is safer.
Die explizite Verwendung von String.valueOf() ist sicherer.

7.3 Passing double Directly to BigDecimal

7.3 Direktes Übergeben von double an BigDecimal

BigDecimal bd = new BigDecimal(0.1); // not recommended

This is dangerous because it uses a double that already contains approximation error.
Das ist gefährlich, weil ein double verwendet wird, das bereits einen Annäherungsfehler enthält.

The correct approach:
Der korrekte Ansatz:

BigDecimal bd = new BigDecimal("0.1");

For money and precision-critical cases, always create it from a string.
Für Geld- und präzisionskritische Fälle immer aus einem String erstellen.

7.4 Writing Code Assuming Exceptions Won’t Happen

7.4 Code schreiben, der annimmt, dass Ausnahmen nicht auftreten

int i = Integer.parseInt(input);

In real projects, the assumption that input is always valid rarely holds.
In realen Projekten gilt die Annahme, dass Eingaben immer gültig sind, selten.
When handling external input, always include exception handling:
Beim Umgang mit externen Eingaben immer Ausnahmebehandlung einbauen:

try {
    int i = Integer.parseInt(input);
} catch (NumberFormatException e) {
    // Error handling
}

7.5 Using Values Without Being Aware of Type Differences

7.5 Werte verwenden, ohne sich der Typunterschiede bewusst zu sein

It’s also common to use types without thinking about differences like int vs Integer, or double vs BigDecimal.
Es ist auch üblich, Typen zu verwenden, ohne über Unterschiede wie int vs Integer oder double vs BigDecimal nachzudenken.

  • Is your goal calculation?
  • Ist dein Ziel Berechnung?
  • Is your goal display?
  • Ist dein Ziel Anzeige?
  • Is precision critical?
  • Ist Präzision kritisch?

Choosing types based on the purpose is the quickest way to prevent bugs.
Die Wahl der Typen nach dem Zweck ist der schnellste Weg, Bugs zu verhindern.

8. Summary

8. Zusammenfassung

In Java, converting between numbers and strings is used daily, but it’s also a process where small mistakes can lead to major issues.
In Java wird die Umwandlung zwischen Zahlen und Zeichenketten täglich verwendet, ist aber auch ein Prozess, bei dem kleine Fehler zu großen Problemen führen können.

Key takeaways from this article:
Wesentliche Erkenntnisse aus diesem Artikel:

. Für Zahl → Zeichenkette, ist String.valueOf() der Standard
Für Zeichenkette → Zahl, wähle zwischen parseXxx() und valueOf() basierend auf dem Rückgabetyp
Externe Eingaben behandeln und davon ausgehen, dass Ausnahmen auftreten können
BigDecimal für Geld und präzisionskritische Berechnungen verwenden
* Ambiguöse Muster wie + "" vermeiden

Statt Methoden auswendig zu lernen, ist es wichtiger, basierend auf dem Anwendungsfall und dem Typ zu wählen.
Mit dieser Einstellung gerät man viel seltener in Schwierigkeiten bei der grundlegenden Verarbeitung in Java.

9. Häufig gestellte Fragen (FAQ)

Hier fassen wir häufige Stolperfallen für Leser zusammen, die nach „java number string conversion“ suchen, im Frage‑Antwort‑Format.
Dieser Abschnitt soll Lücken schließen, die nach dem Lesen des Haupttextes noch bestehen könnten.

Q1. Was ist die beste Methode, um eine Zahl in Java in eine Zeichenkette zu konvertieren?

Im Allgemeinen ist die am meisten empfohlene Methode String.valueOf().

Gründe:

  • Konsistent und leicht verständlich
  • Funktioniert sowohl mit primitiven Typen als auch mit Wrapper‑Klassen
  • Wirft keine Ausnahme, wenn null übergeben wird
    String s = String.valueOf(100);
    

In realen Projekten hilft es, dies als Standard zu verwenden, um Fehler zu vermeiden.

Q2. Was sollte ich verwenden: parseInt oder valueOf?

Wähle basierend auf dem Rückgabetyp.

  • Integer.parseInt()int (primitiv)
  • Integer.valueOf()Integer (Wrapper‑Klasse)

Wenn das Ziel Berechnungen sind, verwende parseInt().
Wenn du es in Sammlungen speichern oder als Objekt behandeln möchtest, ist valueOf() geeigneter.

Q3. Gibt es eine Möglichkeit, zu prüfen, ob eine Zeichenkette numerisch ist, bevor sie konvertiert wird?

Ein einfacher Ansatz ist die Verwendung eines regulären Ausdrucks.

boolean isNumber = input.matches("\\d+");

Allerdings hat diese Methode Einschränkungen:

  • Dezimalzahlen und negative Werte sind schwer zu unterstützen
  • Sie kann keine vollständige Sicherheit garantieren

Daher ist es in der Praxis am besten anzunehmen, dass try-catch immer noch notwendig ist als letzte Sicherheitsmaßnahme.

Q4. Warum tritt NumberFormatException bei numerischer Konvertierung auf?

NumberFormatException tritt auf, wenn eine Zeichenkette nicht als Zahl interpretiert werden kann.

Häufige Ursachen:

  • Enthält nicht‑numerische Zeichen
  • Leere Zeichenkette oder null
  • Versuch, eine Dezimalzahl in einen Ganzzahltyp zu konvertieren
  • Enthält Kommas oder Symbole

Beim Umgang mit externen Eingaben sollte man stets davon ausgehen, dass Ausnahmen auftreten können.

Q5. Warum sollte ich double nicht für Geldberechnungen verwenden?

Da double binär als Annäherung gespeichert wird, kann ein Gleitkommafehler auftreten.

double d = 0.1 + 0.2; // 0.30000000000000004

Für Geld, Zinsen und andere präzisionskritische Fälle ist die richtige Wahl, BigDecimal aus einer Zeichenkette zu erstellen.

BigDecimal bd = new BigDecimal("0.1");

Q6. Worauf sollte ich achten, wenn ich Formulareingabewerte in Zahlen konvertiere?

Behalte stets diese Punkte im Hinterkopf:

  • Auf null / leere Zeichenketten prüfen
  • Ausnahmen mit try-catch abfangen
  • Klar definiertes Verhalten für Fehlersituationen festlegen

Betrachte Benutzereingaben standardmäßig als „potenziell ungültig“, um Fehler zu vermeiden.

Q7. Was, wenn ich das Anzeigeformat nach der Konvertierung in eine Zeichenkette steuern möchte?

Halte numerische Konvertierung und Anzeigeformatierung getrennt.

  • Konvertierung: String.valueOf() oder BigDecimal
  • Formatierung: DecimalFormat verwenden, usw.

Die Trennung von interner Verarbeitung und Präsentation verbessert die Wartbarkeit.