manuel selva
Me pregunto por qué el método String.valueOf(int i)
existe? Estoy usando este método para convertir int
en String
y acabo de descubrir el Integer.toString(int i)
método.
Después de ver la implementación de estos métodos, vi que el primero está llamando al segundo. Como consecuencia, todas mis llamadas a String.valueOf(int i)
supone una llamada más que llamar directamente Integer.toString(int i)
Damian Leszczyński – Vash
En tipo String tenemos varios métodos 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)
Como podemos ver, esos métodos son capaces de resolver todo tipo de números.
cada implementación de un método específico como el que ha presentado: Entonces, para los números enteros, tenemos
Integer.toString(int i)
para doble
Double.toString(double d)
etcétera
En mi opinión, esto no es algo histórico, pero es más útil para un desarrollador usar el método valueOf
de la clase String que del tipo adecuado, ya que nos lleva a realizar menos cambios cuando queremos cambiar el tipo en el que estamos operando.
Muestra 1:
public String doStuff(int num) {
// Do something with num...
return String.valueOf(num);
}
Muestra2:
public String doStuff(int num) {
// Do something with num...
return Integer.toString(num);
}
Como vemos en el ejemplo 2, tenemos que hacer dos cambios, al contrario del ejemplo uno.
En mi conclusión, usando el valueOf
El método de la clase String es más flexible y por eso está disponible allí.
-
y no olvides
Integer.toString(int i, int radix)
que se convertirá en cadenas de bases distintas de 10.– Esteban P.
1 oct 2010 a las 21:36
-
@Vash ¿Podría explicar también sobre el uso de una cadena vacía para convertir int en String en comparación con String.valueOf? por ejemplo) “” + int i = “i” ? Cuál es el mejor ?
– Kanagavelu Sugumar
24 de septiembre de 2013 a las 5:31
-
Para formatear int como cadena, no debe usar “” + i. No existe la cabeza grande pero generalmente porque esto no es elegante. En lugar de usar
String.valueOf(int)
puedes usarString.format("%d",i);
para leer más por favor visite este sitio web docs.oracle.com/javase/6/docs/api/java/util/Formatter.html– Damian Leszczyński – Vash
24 de septiembre de 2013 a las 7:38
-
Desearía que el autoboxing fuera más inteligente y simplemente agregara la conversión en la compilación o algo así.
– Rob subvención
14/10/2013 a las 12:38
-
@RobertGrant El autoboxing no es el caso aquí. Pero para responder a sus inquietudes, es inteligente que pueda hacer esto.
int i = new Integer("1");
y viceversa.– Damian Leszczyński – Vash
15/10/2013 a las 14:50
Costa
Una gran diferencia es que si invocas toString()
en un objeto nulo obtendrás un NullPointerException
mientras que, utilizando String.valueOf()
usted no puede verificar nulo.
-
la pregunta es sobre
Integer.toString(int i)
astatic
método. No existennull
objetos posibles.– Petr Janeček
27 de junio de 2012 a las 12:40
-
Integer i = null;
i.toString(); // Null pointer exception!!
String.valueOf(i); // No exception
–Manish Singh
16 de octubre de 2012 a las 6:25
-
@Manis Kumar: Su ejemplo no disparará el
String.valueOf(int i)
método peroString.valueOf(Object obj)
. De todos modos, la pregunta es sobre primitivos.int
valores, donde no hay posibilidad denull
.– hleinona
1 de noviembre de 2012 a las 11:47
-
@manish_s quedó bastante claro en el ejemplo que nadie está hablando del tipo de objeto Integer. Sólo estamos hablando de primitivos.
–Daniel Ochoa
1 de marzo de 2016 a las 14:14
-
@manish_s: El OP no dijo
Integer.toString()
peroInteger.toString(int i)
. Ese es un método estático (docs.oracle.com/javase/7/docs/api/java/lang/…).– LarsH
7 de diciembre de 2016 a las 3:03
Sólo dos formas diferentes de hacer lo mismo. Puede ser una razón histórica (no recuerdo si uno vino antes que el otro).
-
Sí, pero si algo está haciendo lo mismo, no significa que sean lo mismo.
– Damian Leszczyński – Vash
26 de julio de 2010 a las 15:29
-
String.valueOf(int) simplemente llama a Integer.toString(i) directamente. Así que es mejor llamar a Integer.toString(int).
– djchapm
21 de mayo de 2019 a las 16:21
Rey
La clase String proporciona métodos valueOf para todos los tipos primitivos y el tipo de objeto, por lo que asumo que son métodos convenientes a los que se puede acceder a través de una clase.
NB Perfilado de resultados
Promedio intToString = 5368ms, promedio stringValueOf = 5689ms (para 100,000,000 operaciones)
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));
}
}
davio
De las fuentes de Java:
/**
* 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);
}
Entonces dan exactamente el mismo resultado y uno de hecho llama al otro. String.valueOf
es más flexible si puede cambiar el tipo más adelante.
agabrys
Si nos fijamos en el código fuente de la String
clase, en realidad llama Integer.toString()
cuando usted llama valueOf()
.
Habiendo dicho eso, Integer.toString()
podría ser un poco más rápido si las llamadas al método no están optimizadas en tiempo de compilación (que probablemente lo estén).
dios de la basura
La implementación de String.valueOf()
que ves es la forma más sencilla de cumplir con el contrato especificado en la API: “La representación es exactamente la devuelta por el Integer.toString()
método de un argumento”.
Solo para fines de referencia: stackoverflow.com/questions/3335685/integer-tostring
– Bobby
26 de julio de 2010 a las 14:25