W3docs

Wie man in Java einen int in einen String umwandelt

Java int in String umwandeln mit Integer.toString, String.valueOf und Verkettung.

Einen int in einen String zu verwandeln ist eine der häufigsten Konvertierungen in Java — man braucht sie immer dann, wenn man eine Zahl protokolliert, eine Nachricht zusammenstellt oder einen Wert in eine Datei schreibt. Das JDK bietet dafür mehrere Möglichkeiten, und alle erzeugen denselben Text. Dieses Kapitel zeigt die idiomatischen Optionen und wann man welche verwenden sollte.

Integer.toString — der direkte Aufruf

Die klarste und expliziteste Methode ist Integer.toString(int). Sie sagt genau das, was sie tut, und gibt den Dezimaltext der Zahl zurück:

int n = 256;
String s = Integer.toString(n); // "256"

Das ist die Methode, die String.valueOf und Verkettung intern beide aufrufen, und damit die kanonische Konvertierung. Negative Werte behalten ihr Vorzeichen (Integer.toString(-7) gibt "-7" zurück), und das Ergebnis ist niemals null.

String.valueOf — null-sicher und überladen

String.valueOf ist für jeden primitiven Typ überladen, sodass derselbe Aufruf für int, long, double, boolean und char funktioniert:

int n = 256;
String s = String.valueOf(n); // "256"

Für einen int delegiert sie einfach an Integer.toString, das Ergebnis ist also identisch. Viele Entwickler bevorzugen sie, weil ein einziger Name alle primitiven Typen abdeckt, und sie ist die übliche Wahl beim Konvertieren einer Objektreferenz, die null sein könnte (sie gibt "null" zurück, anstatt eine Ausnahme zu werfen).

String-Verkettung — schnell, aber Vorsicht bei den Kosten

Das Anhängen eines int an einen leeren String erzwingt eine Konvertierung:

int n = 256;
String s = "" + n; // "256"

Das ist prägnant und für einen Einzelfall in Ordnung, aber der Compiler wandelt es in eine StringBuilder-Operation um. Innerhalb einer Schleife erzeugt das wiederholte "" + n viele kurzlebige Objekte; bevorzuge dort Integer.toString oder einen einzelnen StringBuilder.

String.format und Radix-Konvertierungen

Wenn Auffüllung, ein Vorzeichen oder eine nicht-dezimale Basis benötigt wird, verwende String.format oder die Radix-bewussten Integer-Methoden:

String padded = String.format("%05d", 42);   // "00042"
String hex    = Integer.toString(255, 16);    // "ff"
String binary = Integer.toBinaryString(255);  // "11111111"

Hier ein Vergleich der gängigen Optionen:

AnsatzAm besten fürHinweis
Integer.toString(n)Einfacher DezimaltextKanonisch; niemals null
String.valueOf(n)Ein Name für alle primitiven TypenDelegiert an Integer.toString
"" + nSchnelle Inline-VerwendungIn engen Schleifen vermeiden
String.format("%05d", n)Auffüllung / FormatierungLocale-bewusst, langsamer
Integer.toString(n, radix)Hex-, Binär-, OktaltextRadix 2–36

Ein durchgearbeitetes Beispiel

Dieses Programm führt jeden Ansatz auf demselben Wert aus, bestätigt, dass die drei gebräuchlichen Methoden gleiche Strings erzeugen, und zeigt Formatierungs- und Radix-Ausgabe.

java— editable, runs on the server

Was aus der Ausgabe zu entnehmen ist:

  • Integer.toString(-42), String.valueOf(-42) und "" + (-42) geben alle -42 aus — die drei gebräuchlichen Methoden sind für einfachen Dezimaltext austauschbar.
  • Die Zeile equal? gibt true aus und beweist, dass die drei Ergebnisse Zeichen für Zeichen identisch sind, weil String.valueOf und Verkettung beide über Integer.toString laufen.
  • Das negative Vorzeichen bleibt bei der Konvertierung erhalten, und der resultierende String hat die Länge 3 (-, 4, 2) — das Minuszeichen zählt als Zeichen.
  • String.format("%05d", 42) gibt 00042 aus und zeigt, wie die Direktive %05d auf eine Mindestbreite von fünf Stellen mit Nullen auffüllt.
  • Integer.toBinaryString(255) gibt 11111111 aus und Integer.toString(255, 16) gibt ff aus, was zeigt, dass ein int in jeder Basis dargestellt werden kann, nicht nur dezimal.

Übung

Übung
Welcher Aufruf wandelt einen int in seinen einfachen dezimalen String um und ist die kanonische Methode, an die String.valueOf(int) intern delegiert?
Welcher Aufruf wandelt einen int in seinen einfachen dezimalen String um und ist die kanonische Methode, an die String.valueOf(int) intern delegiert?

Verwandte Kapitel

Was this page helpful?