Java int a String – Integer.toString (i) vs new Integer (i) .toString ()

Algunas veces Java me desconcierta.
Tengo una gran cantidad de inicializaciones int para hacer.

¿Cuál es la verdadera diferencia?

  1. Integer.toString(i)
  2. new Integer(i).toString()

Integer.toString llama al método estático en la clase Integer . No necesita una instancia de Integer .

Si llama al new Integer(i) , crea una instancia de tipo Integer , que es un objeto completo de Java que encapsula el valor de su int. Luego llama al método toString para pedirle que devuelva una representación de cadena de sí mismo .

Si todo lo que quiere es imprimir un int , usaría el primero porque es más ligero, más rápido y no usa memoria extra (aparte de la cadena devuelta).

Si quiere un objeto que represente un valor entero -para ponerlo dentro de una colección, por ejemplo- usaría el segundo, ya que le da un objeto completo para hacer todo tipo de cosas que no puede hacer con una int .

new Integer(i).toString() primero crea un objeto envoltorio (redundante) alrededor de i (que a su vez puede ser un objeto envoltorio Integer ).

Se prefiere Integer.toString(i) porque no crea ningún objeto innecesario.

Otra opción es el método estático String.valueOf .

 String.valueOf(i) 

Se siente un poco más correcto que Integer.toString(i) para mí. Cuando el tipo de yo cambie, por ejemplo de int a double , el código permanecerá correcto.

  1. new Integer(i).toString();

    Esta instrucción crea el objeto del Entero y luego llama a sus métodos a Cadena toString(i) para devolver la representación de Cadena del valor del Entero .

  2. Integer.toString(i);

    Devuelve el objeto String que representa el int (entero) específico , pero aquí toString(int) es un método static .

El resumen es en el primer caso devuelve la representación de cadena de objetos, donde, como en el segundo caso, devuelve la representación de cadena de entero.

También recomiendo usar

 int integer = 42; String string = integer + ""; 

Simple y efectivo.

Aunque me gusta la recomendación de fhucho de

 String.valueOf(i) 

La ironía es que este método realmente llama

 Integer.toString(i) 

Por lo tanto, use String.valueOf(i) si le gusta cómo se lee y no necesita radix, pero también sabiendo que es menos eficiente que Integer.toString(i) .

En términos de medición del rendimiento, si está considerando el rendimiento en el tiempo, entonces Integer.toString (i); es costoso si llama menos de 100 millones de veces. De lo contrario, si son más de 100 millones de llamadas, el nuevo Integer (10) .toString () tendrá un mejor rendimiento.

A continuación se muestra el código a través del cual puede intentar medir el rendimiento,

 public static void main(String args[]) { int MAX_ITERATION = 10000000; long starttime = System.currentTimeMillis(); for (int i = 0; i < MAX_ITERATION; ++i) { String s = Integer.toString(10); } long endtime = System.currentTimeMillis(); System.out.println("diff1: " + (endtime-starttime)); starttime = System.currentTimeMillis(); for (int i = 0; i < MAX_ITERATION; ++i) { String s1 = new Integer(10).toString(); } endtime = System.currentTimeMillis(); System.out.println("diff2: " + (endtime-starttime)); } 

En términos de memoria, el

nuevo entero (i) .toString ();

tomará más memoria, ya que creará el objeto cada vez, por lo que la fragmentación de la memoria se producirá.

Mejor:

 Integer.valueOf(i).toString() 

La forma simple es simplemente concatenar "" con entero:

 int i = 100; String s = "" + i; 

ahora s tendrá 100 como valor de cadena.

Aquí Integer.toString llama al método estático en la clase Integer. No requiere que el objeto llame.

Si llama a new Integer(i) primero crea una instancia de tipo Integer, que es un objeto completo de Java que encapsula el valor de su int i. Luego llama al método toString para pedirle que devuelva una representación de cadena de sí mismo.

1. Integer.toString(i)

 Integer i = new Integer(8); // returns a string representation of the specified integer with radix 8 String retval = i.toString(516, 8); System.out.println("Value = " + retval); 

2. new Integer(i).toString()

  int i = 506; String str = new Integer(i).toString(); System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class java.lang.String