Unterschied Integer.toString(x) und x.toString()

matze86

Bekanntes Mitglied
Hallo, ich bin jetzt drauf gestoßen, dass ich in einer Methode nur Integer.toString(x) statt x.toString() verwenden kann. Was ist da der Unterschied?
x steht für ein Integer.

Ich übergebe in einer Methode ein Integer und möchte den in einen String später umwandeln.
Gruß
 

temi

Top Contributor
Kein Unterschied. Die Methode Integer.toString() ruft intern die Metode Integer.toString(int) auf.

Allerdings solltest du, wo immer möglich, den primitiven Datentyp int, anstatt von Integer (die Wrapper-Klasse) verwenden, um die unnötige Erzeugung von Objekten zu vermeiden.
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Jetzt war @temi schneller.

Nur eine Ergänzung bezüglich
dass ich in einer Methode nur Integer.toString(x) statt x.toString() verwenden kann.
Wenn die Variable vom Typ Integer ist, dann kannst Du auch x.toString() verwenden. Wenn x aber nur ein int ist, dann ist es ein Value Typ und damit ist x keine Referenz auf eine Instanz. Keine Referenz bedeutet: Es lassen sich darauf keine Methoden aufrufen.
 

temi

Top Contributor
Dann aber auch noch eine Ergänzung dazu ;)
Wenn die Variable vom Typ Integer ist, dann kannst Du auch x.toString() verwenden. Wenn x aber nur ein int ist, dann ist es ein Value Typ und damit ist x keine Referenz auf eine Instanz. Keine Referenz bedeutet: Es lassen sich darauf keine Methoden aufrufen.
In dem Fall bietet sich dann wieder die statische Methode Integer.toString(int) an, um den primitiven Typen in einen String zu wandeln.
 

matze86

Bekanntes Mitglied
Anbei der Beispielcode, wo nur Integer.toString(x) funktionier (siehe Zeile 4).

Java:
class Zahl{
    String tester(int x){
        String s;
        s = Integer.toString(x); //x.toString() geht nicht
        return s;}
    }

public class Test {
    public static void main(String[] args) {
        Zahl y = new Zahl();
        String ff;
        ff = y.tester(5);
       
        System.out.println(ff);
    }
}
 
K

kneitzel

Gast
Anbei der Beispielcode, wo nur Integer.toString(x) funktionier (siehe Zeile 4).
Das war ja, was ich bei der Erläuterung gemeint habe: Der Parameter x ist vom Typ int.

Du kannst Methoden doch nur auf Referenzen aufrufen, da Referenzen auf Objekte/Instanzen verweisen! Wenn Du als Typ Integer hättest, dann könntest Du da auch toString aufrufen:
String tester(Integer x){

Aber dann kannst Du d auch null übergeben, also evtl. nicht das, was Du willst.

Generell gibt es auch eine automatische Umwandlung wenn bei der Addition ein Parameter ein String ist. Also ein einfaches
"" + x reicht zur einfachen Umwandlung bereits.
 

temi

Top Contributor
Aber aufpassen! Das folgende funktioniert:
Java:
Integer sum = 0;
for (int i = 0; i < 10000; i++) {
    sum += i;
}
Aber es wird jedesmal, wenn sum berechnet wird, ein neues Objekt erzeugt. Das macht den Code unnötig langsam.
 

mrBrown

Super-Moderator
Mitarbeiter
Generell ist für sowas String.valueOf meistens am sinnvollsten, das ist für alle Typen überladen und ist nullsafe, was für die Methoden von Integer nicht gilt.
 

temi

Top Contributor
Generell ist für sowas String.valueOf meistens am sinnvollsten, das ist für alle Typen überladen und ist nullsafe, was für die Methoden von Integer nicht gilt.
[CODE lang="java" title="Implementierung von valueOf der Klasse String"]
public static String valueOf(int i) {
return Integer.toString(i);
}[/CODE]

Aber @mrBrown hat schon recht damit. Es gibt halt viele Wege, die nach Rom führen und nicht immer ist einer der Beste.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
[CODE lang="java" title="Implementierung von valueOf der Klasse String"]
public static String valueOf(int i) {
return Integer.toString(i);
}[/CODE]
Ich weiß :)

Und jetzt ändert irgendwer den Typen zu Integer, läuft durch Autoboxing weiter ohne Probleme, bis dann null übergeben wird und die NPE fliegt.


Und mir String.valueOf hat man zusätzlich den Vorteil, das es überall gleich ist, wenn man sich darauf festlegt vermeidet man den Mischmasch aus 4 verschiedenen Varianten pro Typ.
 

temi

Top Contributor
Ja. Da ist noch ne Annotation @NotNull und @Contract(pure=true). Hab jetzt nicht geschaut, was das bewirkt.
 
M

Mart

Gast
Ja. Da ist noch ne Annotation @NotNull und @Contract(pure=true). Hab jetzt nicht geschaut, was das bewirkt.
eine annotation tut an sich nichts "selbst" .. zb die FXML annotation ist einfach nur die klasse und sonst nix drin, diese wird dann durch reflektion und sonst was einen "sinn"gegeben
 

mihe7

Top Contributor
Und jetzt ändert irgendwer den Typen zu Integer, läuft durch Autoboxing weiter ohne Probleme, bis dann null übergeben wird und die NPE fliegt.


Und mir String.valueOf hat man zusätzlich den Vorteil, das es überall gleich ist, wenn man sich darauf festlegt vermeidet man den Mischmasch aus 4 verschiedenen Varianten pro Typ.
Genau aus dem Grund verwende ich String.valueOf() in der Regel ungern :) Ich will eine Exception und keinen String "null", der dann still und heimlich irgendwo landet und dann irgendwo/-wann anders zum Problem führt (ja, ich weiß, sollte beim Test auffallen).
 

mrBrown

Super-Moderator
Mitarbeiter
Genau aus dem Grund verwende ich String.valueOf() in der Regel ungern :) Ich will eine Exception und keinen String "null", der dann still und heimlich irgendwo landet und dann irgendwo/-wann anders zum Problem führt (ja, ich weiß, sollte beim Test auffallen).
Stimmt, ist je nachdem wo man das benutzt vielleicht doch sinnvoller.


Ich hab zu viel an meinen üblichen Anwendungsfall gedacht, das ist meistens in toString oder Log-Ausgaben oder an ähnlichen "internen" Stellen, da will ich explizit keine Exception. Aber ja, an allen anderen Stellen würd ich die NPE auch bevorzugen.
 
K

kneitzel

Gast
Wobei ich immer einfach kurz etwas schreibe wie "" + x - das ist deutlich kürzer als ein String.valueOf(x) und von der Logik her gleich ist:

JLS 5.1.11
Any type may be converted to type String by string conversion.

A value x of primitive type T is first converted to a reference value as if by giving it as an argument to an appropriate class instance creation expression (§15.9):

Now only reference values need to be considered:

  • If the reference is null, it is converted to the string "null" (four ASCII characters n, u, l, l).
  • Otherwise, the conversion is performed as if by an invocation of the toString method of the referenced object with no arguments; but if the result of invoking the toString method is null, then the string "null" is used instead.

String.valueOf(Object)
if the argument is null, then a string equal to "null"; otherwise, the value of obj.toString() is returned.

Der Unterschied, der hier halt intern ist, ist die Erstellung einer Instanz, die bei der String Concatenation auftritt (so wirklich exakt so vorgegangen wird und intern nicht einfach ein String.valueOf ausgeführt wird. Hier würde ich prinzipiell bei der genauen Implementation diese Optimierung erwarten. Aber ich habe jetzt kein Bytecode analysiert.)
 
M

Mart

Gast
Wobei ich immer einfach kurz etwas schreibe wie "" + x - das ist deutlich kürzer als ein String.valueOf(x) und von der Logik her gleich ist:

JLS 5.1.11


String.valueOf(Object)


Der Unterschied, der hier halt intern ist, ist die Erstellung einer Instanz, die bei der String Concatenation auftritt (so wirklich exakt so vorgegangen wird und intern nicht einfach ein String.valueOf ausgeführt wird. Hier würde ich prinzipiell bei der genauen Implementation diese Optimierung erwarten. Aber ich habe jetzt kein Bytecode analysiert.)
es ist jedoch ein unterschied zwischen

String s = 3 +3 +"";
und String s = "" + 3 +3;
wobei hier das string value of eindeutiger wäre was man möchte
 
K

kneitzel

Gast
wobei hier das string value of eindeutiger wäre was man möchte
Daher ist das Pattern bei mir immer "" + .... - dann ist es immer klar auf Grund der Ausführung der Operatoren von Links nach Rechts.

Und ich mag halt keine zu langen Zeilen. Aber wie @mrBrown ja auch den typischen Anwendungsfall für sowas beschrieben hat:
Ich hab zu viel an meinen üblichen Anwendungsfall gedacht, das ist meistens in toString oder Log-Ausgaben oder an ähnlichen "internen" Stellen,

Wenn es um Ausgaben geht, ist es in Projekten oft so, dass eben eine Nachricht aus Ressourcen zusammen gesetzt wird um die Ausgaben anzupassen. Und da läuft es dann bei mir auf java.text.MessageFormat hinaus. (Hier wird auf Argumente über die Position zugegriffen. Es können also Werte in beliebiger Reihenfolge und Anzahl verwendet werden. Bei Übersetzungen / Anpassungen an Kundenwünsche kann das durchaus Sinnvoll sein.) Und da wird dann auch nichts in String umgewandelt, denn da will man ggf. auch Formatierungen haben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
G Unterschied zwischen Integer und int in java Java Basics - Anfänger-Themen 8
R Unterschied zwischen Integer und int Java Basics - Anfänger-Themen 6
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
P Unterschied Installation von zipped JDK vs Installer-JDK (auf Windows)? Java Basics - Anfänger-Themen 2
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
K Unterschied Information Hiding und Kapselung? Java Basics - Anfänger-Themen 2
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
G Methoden wo ist der Unterschied?? Java Basics - Anfänger-Themen 11
D Unterschied charAt() substr() Java Basics - Anfänger-Themen 3
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
H .jar unterschied .class Java Basics - Anfänger-Themen 3
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
K Unterschied for-Schleife Java Basics - Anfänger-Themen 14
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
H Unterschied BufferedReader und BufferedInputStream Java Basics - Anfänger-Themen 4
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
T Unterschied dynamischer und statischer Laufzeittyp Java Basics - Anfänger-Themen 1
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
V Unterschied x++ und x=x++ Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
A Klassen Unterschied Warteschlange, Stapel und Liste Java Basics - Anfänger-Themen 3
L Unterschied zwischen Klassen - und Instanzvarbiablen Java Basics - Anfänger-Themen 1
M Wo liegt der Unterschied? Deklaration Klasse oder Konstruktur Java Basics - Anfänger-Themen 3
S Unterschied print() und println() Java Basics - Anfänger-Themen 3
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
S Datentypen Unterschied elementare und zusammengesetzte/strukturierte Datentypen Java Basics - Anfänger-Themen 5
M Unterschied zwischen Classpath eines Eclipse Projektes und dem CLASSPATH? Java Basics - Anfänger-Themen 3
S Unterschied Ausführung in IDE <-> Befehlszeile Java Basics - Anfänger-Themen 0
C Unterschied Objekte! Java Basics - Anfänger-Themen 13
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
R Erste Schritte Unterschied Array-Parameter zu Array als Parameter? Java Basics - Anfänger-Themen 7
V Unterschied Array & ArrayList Java Basics - Anfänger-Themen 13
D Geschwindigkeits unterschied bei import? Java Basics - Anfänger-Themen 13
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
L Unterschied zu C++ Java Basics - Anfänger-Themen 6
A Unterschied JDK SDK Java Basics - Anfänger-Themen 4
L Objekterzeugung Unterschied..? Java Basics - Anfänger-Themen 6
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
B Klassen Unterschied Konstruktoren. Java Basics - Anfänger-Themen 3
A Exakte Unterschied zwischen Java EE und Java SE? Java Basics - Anfänger-Themen 4
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14
S Interface Unterschied: setContentPane() & getContentPane().add Java Basics - Anfänger-Themen 5
Helgon Unterschied runnable und normale jar Java Basics - Anfänger-Themen 6
D Unterschied bidirectional unidirectional Java Basics - Anfänger-Themen 10
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
O Java unterschied zwischen Interface und Interface_Referenzen!!?? Java Basics - Anfänger-Themen 7
I Unterschied Lizenz EPL und LGPL Java Basics - Anfänger-Themen 7
P Unterschied Windowclosed / WindowClosing Java Basics - Anfänger-Themen 10
J scheduleAtFixedRate scheduleWithFixedDelay Unterschied? Java Basics - Anfänger-Themen 17
S Erste Schritte Grundsatzfragen Unterschied Java / PHP Java Basics - Anfänger-Themen 6
P Unterschied JRE innerhalb/ außerhalb des JDK Verzeichnisses? Java Basics - Anfänger-Themen 5
H printf: Unterschied %f und %g Java Basics - Anfänger-Themen 5
M Unterschied SDK 1.4 und 1.6 Java Basics - Anfänger-Themen 5
S Unterschied java.util.prefs / java.util.Properties Java Basics - Anfänger-Themen 3
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
T Unterschied in Zahlendarstellungen Java Basics - Anfänger-Themen 2
F Unterschied JPanel und JFrame Java Basics - Anfänger-Themen 5
K Unterschied Klassen- und Instanzattribute Java Basics - Anfänger-Themen 4
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
J Instanzvariablen - Lokale Variablen - warum der Unterschied? Java Basics - Anfänger-Themen 5
P Unterschied dieser 2 code Zeilen Java Basics - Anfänger-Themen 12
I Datentypen Unterschied in Deklaration von ArrayList Java Basics - Anfänger-Themen 26
G Unterschied e extends y vs ? extends y Java Basics - Anfänger-Themen 5
M Unterschied append / write aus der Klasse Writer Java Basics - Anfänger-Themen 2
M unterschied OutpuStreamWriter und BufferedWriter Java Basics - Anfänger-Themen 5
B Unterschied zwischen String & char Array? Java Basics - Anfänger-Themen 5
J Unterschied Instanzattribut und Referenzvariable Java Basics - Anfänger-Themen 4
J Unterschied bei Schleifen Java Basics - Anfänger-Themen 2
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
B Variablen: unterschied zwischen Klassen und Instanzvariable Java Basics - Anfänger-Themen 2
W Unterschied JFrame und JLabel bezüglich Layout? Java Basics - Anfänger-Themen 2
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
B ArrayList generisch? was ist der Unterschied? Java Basics - Anfänger-Themen 4
H Unterschied zwischen 2 Date in Sekunden am einfachsten? Java Basics - Anfänger-Themen 5
tanja Der Unterschied Zwischen Arrays in Java und ADA Java Basics - Anfänger-Themen 11
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
D Unterschied innere Klasse/ anonyme innere Klasse Java Basics - Anfänger-Themen 7
W unterschied jsf mit xhtml und jsf mit jsp Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben