Solo lo usaría "" + 42, pero bueno, ese soy yo. El formulario # 2 dará como resultado un nuevo objeto entero (para la mayoría de los valores de i) como intermedio. También es más mecanografía.
16
@pst: si el objeto intermedio es un problema para usted, entonces "" + 42no es mejor, ya que requiere un intermedio StringBuilderque es mucho más pesado que un Integer.
Joachim Sauer
47
"" + 42 podría funcionar, pero es una mala idea. Gente como yo vendrá a ver tu código e intentará descubrir qué diablos le pasó a la cadena vacía.
Mainguy
3
No lo recomendaría "" + 42porque en el caso de agregar cadenas de enteros, puede terminar agregando los valores y sin darse cuenta.
BoltzmannBrain
20
Si no te gusta escribir mucho, entonces probablemente no deberías programar en Java.
Adam Pierce
Respuestas:
548
Integer.toStringllama al método estático en la clase Integer. No necesita una instancia de Integer.
Si llama new Integer(i), crea una instancia de tipo Integer, que es un objeto Java completo que encapsula el valor de su int. Luego, llama al toStringmétodo para pedirle que devuelva una representación de cadena de sí mismo .
Si todo lo que desea es imprimir un int, usaría el primero porque es más ligero, más rápido y no usa memoria adicional (aparte de la cadena devuelta).
Si desea 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 un simple objeto int.
Se siente un poco más correcto que Integer.toString(i)para mí. Cuando el tipo de i cambia, por ejemplo de inta double, el código seguirá siendo correcto.
Si. A menos que deba usar RADIX (en ese caso, debe usar Integer.toString)
marcolopes
14
new Integer(i).toString();
Esta declaración crea el objeto del entero y luego llama a sus métodos toString(i)para devolver la representación de cadena del valor del entero .
Integer.toString(i);
Se devuelve el objeto de cadena que representa el int específico (número entero) , pero aquí toString(int)es un staticmétodo.
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.
esta es definitivamente una mala forma, porque se basa en una parte bastante sutil del lenguaje Java y es menos eficiente que Integer.toString (i). Ver esta publicación SO
En general, es una mala idea hacer las cosas de una manera tan poco intuitiva. Las opciones más obvias como Integer.toString()podrían usar algunas teclas adicionales, pero son mucho más claras, lo cual es crucial cuando desea mantener el código.
Calvin Li
¿No llamaría esto automáticamente al toString()método de la variable entera ?
Ankit Deshpande
11
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, úselo 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 del tiempo, 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 () funcionará mejor.
A continuación se muestra el código a través del cual puede intentar medir el rendimiento,
publicstaticvoid 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 =newInteger(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 sucederá la fragmentación de la memoria.
Creo que esto es mejor, porque como @Dhiraj señaló que en términos de memoria, el "nuevo entero (i) .toString ();" tomará más memoria porque crea un nuevo objeto en lugar de obtener el valor entero y convertirlo en una cadena.
Patricia
44
@Lucy Integer.valueOf (i) devuelve un nuevo número entero, por lo que no hay diferencia
inigoD
No estás proporcionando una respuesta a la pregunta en absoluto. La pregunta es cuál es la diferencia entre bla y bla, no cuál es un mejor reemplazo para bla.
ahitt6345
2
La forma simple es simplemente concatenar ""con un entero:
Aquí
Integer.toStringllama al método estático en la clase Integer. No requiere que el objeto llame.
Si llama new Integer(i)primero, cree una instancia de tipo Integer, que es un objeto Java completo que encapsula el valor de su int i. Luego, llama al toStringmétodo para pedirle que devuelva una representación de cadena de sí mismo.
Integer i =newInteger(8);// returns a string representation of the specified integer with radix 8String retval = i.toString(516,8);System.out.println("Value = "+ retval);
2)new Integer(i).toString()
int i =506;String str =newInteger(i).toString();System.out.println(str +" : "+newInteger(i).toString().getClass());////506 : class java.lang.String
"" + 42
, pero bueno, ese soy yo. El formulario # 2 dará como resultado un nuevo objeto entero (para la mayoría de los valores de i) como intermedio. También es más mecanografía."" + 42
no es mejor, ya que requiere un intermedioStringBuilder
que es mucho más pesado que unInteger
."" + 42
porque en el caso de agregar cadenas de enteros, puede terminar agregando los valores y sin darse cuenta.Respuestas:
Integer.toString
llama al método estático en la claseInteger
. No necesita una instancia deInteger
.Si llama
new Integer(i)
, crea una instancia de tipoInteger
, que es un objeto Java completo que encapsula el valor de su int. Luego, llama altoString
método para pedirle que devuelva una representación de cadena de sí mismo .Si todo lo que desea es imprimir un
int
, usaría el primero porque es más ligero, más rápido y no usa memoria adicional (aparte de la cadena devuelta).Si desea 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 un simple objeto
int
.fuente
new Integer(i).toString()
primero crea un objeto envoltorio (redundante) alrededori
(que en sí mismo puede ser un objeto envoltorioInteger
).Integer.toString(i)
se prefiere porque no crea objetos innecesarios.fuente
Otra opción es el
String.valueOf
método estático .Se siente un poco más correcto que
Integer.toString(i)
para mí. Cuando el tipo de i cambia, por ejemplo deint
adouble
, el código seguirá siendo correcto.fuente
new Integer(i).toString();
Esta declaración crea el objeto del entero y luego llama a sus métodos
toString(i)
para devolver la representación de cadena del valor del entero .Integer.toString(i);
Se devuelve el objeto de cadena que representa el int específico (número entero) , pero aquí
toString(int)
es unstatic
método.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.
fuente
También recomiendo usar
Simple y efectivo.
fuente
Integer.toString()
podrían usar algunas teclas adicionales, pero son mucho más claras, lo cual es crucial cuando desea mantener el código.toString()
método de la variable entera ?Aunque me gusta la recomendación de fhucho de
La ironía es que este método realmente llama
Por lo tanto, úselo
String.valueOf(i)
si le gusta cómo se lee y no necesita radix, pero también sabiendo que es menos eficiente queInteger.toString(i)
.fuente
En términos de medición del rendimiento, si está considerando el rendimiento del tiempo, 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 () funcionará mejor.
A continuación se muestra el código a través del cual puede intentar medir el rendimiento,
En términos de memoria, el
tomará más memoria ya que creará el objeto cada vez, por lo que sucederá la fragmentación de la memoria.
fuente
new Integer(10).toString() can be simplified to Integer.toString(10)
"Mejor:
fuente
La forma simple es simplemente concatenar
""
con un entero:ahora
s
tendrá100
como valor de cadena.fuente
Aquí
Integer.toString
llama al método estático en la clase Integer. No requiere que el objeto llame.Si llama
new Integer(i)
primero, cree una instancia de tipo Integer, que es un objeto Java completo que encapsula el valor de su int i. Luego, llama altoString
método para pedirle que devuelva una representación de cadena de sí mismo.fuente
1)
Integer.toString(i)
2)
new Integer(i).toString()
fuente