Ich frage mich, warum die Methode String.valueOf(int i)
existiert? Ich benutze diese Methode zur Umwandlung int
in String
und nur die entdeckte Integer.toString(int i)
Methode.
Nachdem ich mir die Implementierung dieser Methoden angesehen hatte, sah ich, dass die erste die zweite aufruft. Infolgedessen beinhalten alle meine Anrufe String.valueOf(int i)
einen Anruf mehr als einen direkten AnrufInteger.toString(int i)
Antworten:
Nur zwei verschiedene Arten, dasselbe zu tun. Es kann ein historischer Grund sein (kann mich nicht erinnern, ob einer vor den anderen kam).
quelle
Im String-Typ haben wir mehrere Methoden valueOf
Wie wir sehen können, können diese Methoden alle Arten von Zahlen auflösen
Jede Implementierung einer bestimmten Methode, wie Sie sie vorgestellt haben: Also für ganze Zahlen haben wir
für doppelt
und so weiter
Meiner Meinung nach ist dies keine historische Sache, aber es ist für einen Entwickler nützlicher, die Methode
valueOf
aus der String-Klasse als aus dem richtigen Typ zu verwenden, da dies zu weniger Änderungen führt, die wir vornehmen müssen.Probe 1:
Beispiel 2:
Wie wir in Beispiel 2 sehen, müssen wir im Gegensatz zu Beispiel eins zwei Änderungen vornehmen.
In meinem Fazit ist die Verwendung der
valueOf
Methode aus der String-Klasse flexibler und deshalb dort verfügbar.quelle
Integer.toString(int i, int radix)
dass dies in andere Basen als 10 umgewandelt wird.String.valueOf(int)
, können SieString.format("%d",i);
mehr lesen, besuchen Sie bitte diese Website docs.oracle.com/javase/6/docs/api/java/util/Formatter.htmlint i = new Integer("1");
und umgekehrt.Ein großer Unterschied besteht darin, dass Sie beim Aufrufen
toString()
eines Null-Objekts ein Zeichen erhalten,NullPointerException
währendString.valueOf()
Sie bei Verwendung möglicherweise nicht nach Null suchen.quelle
Integer.toString(int i)
einestatic
Methode. Es sind keinenull
Objekte möglich.Integer i = null;
i.toString(); // Null pointer exception!!
String.valueOf(i); // No exception
String.valueOf(int i)
Methode aber nicht auslösenString.valueOf(Object obj)
. Wie auch immer, die Frage betrifft primitiveint
Werte, für die es keine Möglichkeit gibtnull
.Integer.toString()
aberInteger.toString(int i)
. Dies ist eine statische Methode ( docs.oracle.com/javase/7/docs/api/java/lang/… ).Die String-Klasse bietet valueOf-Methoden für alle primitiven Typen und Objekttypen, daher gehe ich davon aus, dass es sich um praktische Methoden handelt, auf die alle über die eine Klasse zugegriffen werden kann.
NB Profilerstellungsergebnisse
Durchschnittlicher intToString = 5368 ms, durchschnittlicher stringValueOf = 5689 ms (für 100.000.000 Operationen)
quelle
String j
aber niemals verwenden. Der zugrunde liegende Compiler hat dies möglicherweise optimiert. Es ist besser, j Objekt in einer anderen Methode zu übergeben und eine Dummy-Operation durchzuführen.Aus den Java-Quellen:
Sie geben also genau das gleiche Ergebnis und einer nennt den anderen. String.valueOf ist flexibler, wenn Sie den Typ später ändern.
quelle
Wenn Sie sich den Quellcode für die
String
Klasse ansehen , wird erInteger.toString()
beim Aufruf tatsächlich aufgerufenvalueOf()
.That being said,
Integer.toString()
vielleicht ein bisschen schneller sein , wenn die Methodenaufrufe nicht bei der Kompilierung optimiert sind (was sie wahrscheinlich sind).quelle
Die Implementierung
String.valueOf()
, die Sie sehen, ist der einfachste Weg, um den in der API angegebenen Vertrag zu erfüllen: "Die Darstellung ist genau die, die von derInteger.toString()
Methode eines Arguments zurückgegeben wird."quelle
Um die OP-Frage zu beantworten, ist es einfach ein Helfer-Wrapper, den anderen Anruf zu erhalten, und es kommt auf die Wahl des Stils an, und das ist es. Ich denke, hier gibt es viele Fehlinformationen, und das Beste, was ein Java-Entwickler tun kann, ist, sich die Implementierung für jede Methode anzusehen. In jeder IDE sind es nur ein oder zwei Klicks. Sie werden deutlich sehen, dass
String.valueOf(int)
das einfach anruftInteger.toString(int)
.Daher gibt es absolut keinen Unterschied, da beide einen Zeichenpuffer erstellen, die Ziffern in der Zahl durchlaufen, diesen dann in einen neuen String kopieren und zurückgeben (daher erstellen sie jeweils ein String-Objekt). Der einzige Unterschied besteht in einem zusätzlichen Aufruf, den der Compiler ohnehin für einen einzelnen Aufruf eliminiert.
Es ist also nicht wichtig, was Sie aufrufen, außer vielleicht Code-Konsistenz. In Bezug auf die Kommentare zu Nullen wird ein Grundelement verwendet, daher kann es nicht null sein! Sie erhalten einen Fehler beim Kompilieren, wenn Sie das übergebene Int nicht initialisieren. Es gibt also keinen Unterschied, wie Nullen behandelt werden, da sie in diesem Fall nicht vorhanden sind.
quelle
Sie sollten sich keine Sorgen über diesen zusätzlichen Anruf machen, der Sie Effizienzprobleme kostet. Wenn es irgendwelche Kosten gibt, werden sie minimal sein und sollten im Gesamtbild der Dinge vernachlässigbar sein.
Vielleicht liegt der Grund, warum beide existieren, in der Lesbarkeit. Im Zusammenhang mit vielen Typen, in die konvertiert wird,
String
sind verschiedene Aufrufe vonString.valueOf(SomeType)
möglicherweise besser lesbar als verschiedeneSomeType.toString
Aufrufe.quelle
Meine Öffnung ist valueof () und wird für die Darstellung immer als tostring () bezeichnet. Für die Darstellung des primitiven Typs wird valueof verallgemeinert. Java unterstützt standardmäßig keinen Datentyp, definiert jedoch seine Arbeit mit Objekt und Klasse, die alles in cllas gemacht und gemacht hat object .here Integer.toString (int i) erstellt ein Limit für die Konvertierung nur für Ganzzahlen.
quelle
Es gibt keine Unterschiede zwischen Integer.toString (5) und String.valueOf (5).
weil String.valueOf Folgendes zurückgibt:
etc..
quelle
Mit der Methode String.valueOf () müssen Sie sich keine Gedanken über die Daten machen (ob int, long, char, char [], boolean, Object). Sie können einfach Folgendes aufrufen:
Mit der einzigen Syntax kann String.valueOf () alles, was Sie als Parameter übergeben, in String konvertieren und zurückgeben.
Wenn Sie andernfalls Integer.toString (), Float.toString () usw. (dh SomeType.toString ()) verwenden, müssen Sie den Datentyp des Parameters überprüfen, den Sie in einen String konvertieren möchten. Daher ist es besser, String.valueOf () für solche Konvertierungen zu verwenden.
Wenn Sie ein Array von Objektklassen haben, das verschiedene Werte wie Integer, Char, Float usw. enthält, können Sie mithilfe der String.valueOf () -Methode die Elemente eines solchen Arrays einfach in eine String-Form konvertieren. Wenn Sie dagegen SomeType.toString () verwenden möchten, müssen Sie zunächst die Datentypklassen kennen (möglicherweise mithilfe des Operators "instanceOf"), und dann können nur Sie eine Typumwandlung durchführen.
Die aufgerufene String.valueOf () -Methode stimmt mit dem übergebenen Parameter überein (ob Integer, Char, Float usw.) und ruft bei Verwendung der Methodenüberladung die Methode "valueOf ()" auf, deren Parameter übereinstimmt, und innerhalb dieser Methode ist sie ein direkter Aufruf der entsprechenden "toString ()" - Methode.
Wir können also sehen, wie der Aufwand für das Überprüfen des Datentyps und das anschließende Aufrufen der entsprechenden "toString ()" - Methode beseitigt wird. Wir müssen nur die String.valueOf () -Methode aufrufen, ohne uns darum zu kümmern, was in String konvertiert werden soll.
Schlussfolgerung: Die String.valueOf () -Methode hat ihre Bedeutung nur auf Kosten eines weiteren Aufrufs.
quelle
toString ()
Wert von()
behandelt sowohl primitive Typen als auch Objekttypen.
Überprüfen Sie diesen Link, es ist sehr gut. http://code4reference.com/2013/06/which-one-is-better-valueof-or-tostring/
quelle