Solución:
En String type 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: así que para enteros tenemos
Integer.toString(int i)
por 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.
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 la muestra 2, tenemos que hacer dos cambios, al contrario que en la muestra 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í.
Una gran diferencia es que si invoca toString()
en un objeto nulo obtendrás un NullPointerException
mientras que, usando String.valueOf()
no puede verificar si es nulo.
Solo dos formas diferentes de hacer lo mismo. Puede ser una razón histórica (no recuerdo si uno vino antes que el otro).