Integer.toString(int i) vs. String.valueOf(int i) in Java
Lesezeit: 5 Minuten
Manuel Selva
Ich frage mich, warum die Methode String.valueOf(int i) existiert? Ich verwende diese Methode zum Konvertieren int hinein String und gerade die entdeckt Integer.toString(int i) Methode.
Nachdem ich mir die Implementierung dieser Methoden angesehen hatte, sah ich, dass die erste die zweite aufruft. Als Konsequenz alle meine Anrufe an String.valueOf(int i) einen Anruf mehr beinhalten als direkt anrufen Integer.toString(int i)
Nur zu Referenzzwecken: stackoverflow.com/questions/3335685/integer-tostring
– Bobbi
26. Juli 2010 um 14:25 Uhr
Damian Leszczyński – Vash
Im String-Typ haben wir mehrere Methoden valueOf
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
static String valueOf(double d)
static String valueOf(float f)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(Object obj)
Wie wir sehen können, sind diese Methoden in der Lage, alle Arten von Zahlen aufzulösen
jede Implementierung einer bestimmten Methode, wie Sie sie vorgestellt haben: Also für ganze Zahlen haben wir
Integer.toString(int i)
für doppelt
Double.toString(double d)
usw
Meiner Meinung nach ist dies keine historische Sache, aber es ist nützlicher für einen Entwickler, die Methode zu verwenden valueOf von der String-Klasse als vom richtigen Typ, da wir weniger Änderungen vornehmen müssen, wenn wir den Typ ändern möchten, mit dem wir arbeiten.
Probe 1:
public String doStuff(int num) {
// Do something with num...
return String.valueOf(num);
}
Probe2:
public String doStuff(int num) {
// Do something with num...
return Integer.toString(num);
}
Wie wir in Beispiel 2 sehen, müssen wir im Gegensatz zu Beispiel 1 zwei Änderungen vornehmen.
In meiner Schlussfolgerung, mit der valueOf Methode aus der String-Klasse ist flexibler und deshalb dort verfügbar.
Und nicht vergessen Integer.toString(int i, int radix) die in Zeichenfolgen mit anderen Basen als 10 konvertiert werden.
– Stefan P
1. Oktober 2010 um 21:36 Uhr
@Vash Könnten Sie bitte auch die Verwendung einer leeren Zeichenfolge zum Konvertieren von int in String im Vergleich zu String.valueOf erläutern? zB) “” + int i = “i” ? Welches das Beste ist ?
– Kanagavelu Sugumar
24. September 2013 um 5:31 Uhr
Um int als String zu formatieren, sollten Sie das “” + i nicht verwenden. Es gibt keinen großen Overhead, aber im Allgemeinen, weil dies nicht elegant ist. Anstatt zu verwenden String.valueOf(int)können Sie verwenden String.format("%d",i); Um mehr zu lesen, besuchen Sie bitte diese Website docs.oracle.com/javase/6/docs/api/java/util/Formatter.html
– Damian Leszczyński – Vash
24. September 2013 um 7:38 Uhr
Ich wünschte, Autoboxing wäre klüger und hätte die Konvertierung einfach beim Kompilieren oder so hinzugefügt.
– Rob Grant
14. Oktober 2013 um 12:38 Uhr
@RobertGrant Das Autoboxing ist hier nicht der Fall. Aber um Ihre Bedenken zu beantworten, ist es klug, wie Sie dies tun können int i = new Integer("1"); und umgekehrt.
– Damian Leszczyński – Vash
15. Oktober 2013 um 14:50 Uhr
Ein Costa
Ein großer Unterschied besteht darin, dass Sie aufrufen toString() in einem Null-Objekt erhalten Sie a NullPointerException während mit String.valueOf() Sie dürfen nicht auf null prüfen.
Die Frage dreht sich um Integer.toString(int i)A static Methode. Es gibt keine null Objekte möglich.
– Petr Janeček
27. Juni 2012 um 12:40 Uhr
Integer i = null;i.toString(); // Null pointer exception!!String.valueOf(i); // No exception
– Manish Singh
16. Oktober 2012 um 6:25 Uhr
@Manis Kumar: Dein Beispiel wird das nicht feuern String.valueOf(int i) Methode aber String.valueOf(Object obj). Wie auch immer, die Frage dreht sich um primitiv int Werte, wo es keine Möglichkeit gibt null.
– Hleinon
1. November 2012 um 11:47 Uhr
@manish_s Aus dem Beispiel war ziemlich klar, dass niemand über den Objekttyp Integer spricht. Wir reden nur über Primitiven.
Nur zwei verschiedene Möglichkeiten, dasselbe zu tun. Es kann ein historischer Grund sein (ich kann mich nicht erinnern, ob einer vor dem anderen kam).
Ja, aber wenn etwas dasselbe tut, heißt das nicht, dass es dasselbe ist.
– Damian Leszczyński – Vash
26. Juli 2010 um 15:29 Uhr
String.valueOf(int) ruft einfach Integer.toString(i) direkt auf. Rufen Sie also am besten Integer.toString(int) auf.
– djchapm
21. Mai 2019 um 16:21 Uhr
König
Die String-Klasse stellt valueOf-Methoden für alle primitiven Typen und Objekttypen bereit, daher gehe ich davon aus, dass es sich um praktische Methoden handelt, auf die alle über eine Klasse zugegriffen werden kann.
public class StringIntTest {
public static long intToString () {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
String j = Integer.toString(i);
}
long finishTime = System.currentTimeMillis();
return finishTime - startTime;
}
public static long stringValueOf () {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
String j = String.valueOf(i);
}
long finishTime = System.currentTimeMillis();
return finishTime - startTime;
}
public static void main(String[] args) {
long intToStringElapsed = 0;
long stringValueOfElapsed = 0;
for (int i = 0; i < 10; i++) {
intToStringElapsed += intToString();
stringValueOfElapsed+= stringValueOf();
}
System.out.println("Average intToString = "+ (intToStringElapsed /10));
System.out.println("Average stringValueOf = " +(stringValueOfElapsed / 10));
}
}
David
Aus den Java-Quellen:
/**
* Returns the string representation of the {@code int} argument.
* <p>
* The representation is exactly the one returned by the
* {@code Integer.toString} method of one argument.
*
* @param i an {@code int}.
* @return a string representation of the {@code int} argument.
* @see java.lang.Integer#toString(int, int)
*/
public static String valueOf(int i) {
return Integer.toString(i);
}
Sie geben also genau das gleiche Ergebnis und tatsächlich ruft das eine das andere an. String.valueOf ist flexibler, wenn Sie den Typ später ändern.
agabrys
Wenn Sie sich den Quellcode für die String Klasse, es ruft tatsächlich Integer.toString() wenn du anrufst valueOf().
Davon abgesehen, Integer.toString() könnte etwas schneller sein, wenn die Methodenaufrufe zur Kompilierzeit nicht optimiert werden (was sie wahrscheinlich sind).
Müllgott
Die Implementierung von String.valueOf() die Sie sehen, ist der einfachste Weg, den in der API angegebenen Vertrag zu erfüllen: “Die Repräsentation ist genau diejenige, die von der zurückgegeben wird Integer.toString() Methode eines Arguments.”
14450500cookie-checkInteger.toString(int i) vs. String.valueOf(int i) in Javayes
Nur zu Referenzzwecken: stackoverflow.com/questions/3335685/integer-tostring
– Bobbi
26. Juli 2010 um 14:25 Uhr