Variablen Ist String = "" + int inordnung?

Besset

Mitglied
Guten Tag,
Im Internet lese ich oft das Integer zu Strings wiefolgt umgewandelt werden.
[CODE lang="java" title="Int zu String (Internet Lösung)"]int wert = 42;
String str;

str = Wert.toString();[/CODE]

Ich hingegen mache das immer so:
[CODE lang="java" title="Int zu String (Meine Lösung)"]int wert = 42;
String str;

str = "" + wert;[/CODE]

Meine Frage ist jetzt ob Meine Lösung auch in Ordnung ist oder ob da Probleme auftreten können?
 
Statt String.valueOf wäre mein Vorschlag eher ein Integer.toString(int) Aufruf.

Ansonsten läuft das alles aber auch auf genau diesen Aufruf hinaus:

- 1. Fall: "" + wert
Nach Java Language Specification (15.18.1 / 15.1.11) findet hier ein Boxing zu dem Wrapper Typ statt mit anschließendem toString() aufruf.
toString() der Instanz ruft toString(int) der klasse auf -> Integer.toString(int)

- 2. Fall: String.valueOf(int)
hier wird direkt Integer.toString(int) aufgerufen.

Da es eh auf Integer.toString(int) hinaus läuft, könnte man dies direkt nehmen.

Ich selbst neige aber dazu, auch die Variante mit dem Boxing zu nehmen, da ich dies einfach deutlich lesbarer finde im Code.
 
String s = 3+3 + " = " 6 ".0"; einfach mal ausprobieren
Also ich weiss nicht genau, woraus Du hinaus willst. Man könnte zwei Code-Stücke (die gültiger Java Code wären) betrachten:
String str1 = 3 + 3 + " = 6";
String str1 = "6 = " + 3 + 3;

Aber die Ergebnisse sind eigentlich klar. Ausdrücke mit Additionen werden von links nach rechts ausgewertet (JLS 15.18 "The additive operators have the same precedence and are syntactically left-associative (they group left-to-right).")

Daher ist auf den ersten Blick klar, dass dass bei str1 erst 3+3 gerechnet wird (2 Integer werden addiert, Ergebnis ist 6) und im Anschluss wird 6 + " = 6" ausgeführt (wieder JLS 15.18: "If the type of either operand of a + operator is String, then the operation is string concatenation.") so dass das Ergebnis ist "6 = 6"
Bei str2 hat man dann als erstes "6 = " + 3 so dass das Zwischenergebnis "6 = 3" ist. Danach kommt dann "6 = 3" + 3 so dass das Ergebnis dann "6 = 33" ist.

Wenig überraschend finde ich. Und hat auch wenig damit zu tun, wie man eine Zahl in einen String umwandelt.

Was wir aber bisher nur betrachtet haben ist eine unformatierte Ausgabe. Vielleicht ist an der Stelle auch die formatierte Ausgabe von Interesse. Hier gibt es aber wieder mehrere Wege angefangen von NumberFormat über einfache "Format Strings" wie sie z.B. bei String.format oder dem PrintWriter.printf verwendet werden hin zu MessageFormat (Das mir sehr gut gefällt für Nachrichten, denn bei Übersetzungen kann dann die Reihenfolge der Argumente beliebig getauscht werden.)
 

Neue Themen


Zurück
Oben