Je voudrais juste utiliser "" + 42, mais bon, c'est moi. Le formulaire n ° 2 se traduira par un nouvel objet entier (pour la plupart des valeurs de i) comme intermédiaire. C'est aussi plus de frappe.
16
@pst: si l'objet intermédiaire est un problème pour vous, ce "" + 42n'est pas mieux, car il nécessite un intermédiaire StringBuilderqui est beaucoup plus lourd qu'un an Integer.
Joachim Sauer
47
"" + 42 pourrait fonctionner, mais c'est une mauvaise idée. Des gens comme moi viendront regarder votre code et essayer de comprendre ce qui est arrivé à la chaîne vide.
Mainguy
3
Je ne recommanderais pas "" + 42car dans le cas de l'ajout de chaînes d'entiers, vous pourriez finir par ajouter des valeurs et ne pas le réaliser.
BoltzmannBrain
20
Si vous n'aimez pas beaucoup taper, vous ne devriez probablement pas programmer en Java.
Adam Pierce,
Réponses:
548
Integer.toStringappelle la méthode statique dans la classe Integer. Il n'a pas besoin d'une instance de Integer.
Si vous appelez, new Integer(i)vous créez une instance de type Integer, qui est un objet Java complet encapsulant la valeur de votre int. Ensuite, vous appelez la toStringméthode dessus pour lui demander de renvoyer une représentation sous forme de chaîne de lui - même .
Si tout ce que vous voulez est d'imprimer un int, vous utiliserez le premier car il est plus léger, plus rapide et n'utilise pas de mémoire supplémentaire (à part la chaîne retournée).
Si vous voulez un objet représentant une valeur entière - pour le mettre dans une collection par exemple - vous utiliseriez le second, car il vous donne un objet à part entière pour faire toutes sortes de choses que vous ne pouvez pas faire avec un nu int.
Oui. Sauf si vous devez utiliser RADIX (dans ce cas, vous devez utiliser Integer.toString)
marcolopes
14
new Integer(i).toString();
Cette instruction crée l'objet de l'entier, puis appelle ses méthodes toString(i)pour renvoyer la représentation String de la valeur de l'entier .
Integer.toString(i);
Elle retourne l'objet String représentant l'int entier spécifique (entier) , mais voici toString(int)une staticméthode.
Le résumé est dans le premier cas, il renvoie la représentation de la chaîne des objets, alors que dans le second cas, il renvoie la représentation de la chaîne de l'entier.
c'est certainement une mauvaise forme, car elle repose à la fois sur une partie assez subtile du langage Java et est moins efficace que Integer.toString (i). Voir ce message SO
C'est généralement une mauvaise idée de faire les choses de manière si peu intuitive. Des choix plus évidents comme Integer.toString()pourraient utiliser des touches supplémentaires, mais sont beaucoup plus clairs, ce qui est crucial lorsque vous souhaitez conserver le code.
Calvin Li
Cela n'appellerait-il pas automatiquement la toString()méthode de la variable entière ?
Ankit Deshpande du
11
Bien que j'aime la recommandation de fhucho
String.valueOf(i)
L'ironie est que cette méthode appelle en fait
Integer.toString(i)
Ainsi, utilisez-le String.valueOf(i)si vous aimez sa lecture et que vous n'avez pas besoin de radix, mais sachez également qu'il est moins efficace que Integer.toString(i).
En termes de mesure de la performance, si vous envisagez la performance temporelle, alors Integer.toString (i); coûte cher si vous appelez moins de 100 millions de fois. Sinon, s'il s'agit de plus de 100 millions d'appels, le nouveau Integer (10) .toString () fonctionnera mieux.
Ci-dessous, le code à travers lequel vous pouvez essayer de mesurer les performances,
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 termes de mémoire, le
new Integer (i) .toString ();
prendra plus de mémoire car il créera l'objet à chaque fois, donc la fragmentation de la mémoire se produira.
J'ai collé ce code dans IntelliJ IDEA et j'ai reçu un avertissement: " new Integer(10).toString() can be simplified to Integer.toString(10)"
oksayt
Ce code fonctionne pour moi. J'obtiens environ 420 millisecondes pour Integer.toString (10) et 525 millisecondes pour le nouvel Integer (10) .toString ()
Aurait aidé à s'échauffer d'abord, sinon les résultats ne sont pas valides!
sixones
Si vous dites que l'un est cher dans un cas et que l'autre est meilleur dans l'autre cas, cela signifie que l'autre est meilleur / peu coûteux dans toutes les situations.
Je pense que c'est mieux, car comme @Dhiraj a souligné qu'en termes de mémoire, le "nouveau Integer (i) .toString ();" prendra plus de mémoire car il crée un nouvel objet au lieu d'obtenir simplement la valeur entière et de la convertir en chaîne.
Patricia
4
@Lucy Integer.valueOf (i) renvoie un nouvel Integer, donc il n'y a aucune différence
inigoD
Vous ne répondez pas du tout à la question. La question est de savoir quelle est la différence entre bla et bla, pas quel est un meilleur remplacement pour bla.
ahitt6345
2
La manière simple est juste de concaténer ""avec un entier:
Ici,
Integer.toStringla méthode statique est appelée dans la classe Integer. Il ne nécessite pas que l'objet appelle.
Si vous appelez, new Integer(i)vous créez d'abord une instance de type Integer, qui est un objet Java complet encapsulant la valeur de votre int i. Ensuite, vous appelez la toStringméthode dessus pour lui demander de renvoyer une représentation sous forme de chaîne de lui-même.
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
, mais bon, c'est moi. Le formulaire n ° 2 se traduira par un nouvel objet entier (pour la plupart des valeurs de i) comme intermédiaire. C'est aussi plus de frappe."" + 42
n'est pas mieux, car il nécessite un intermédiaireStringBuilder
qui est beaucoup plus lourd qu'un anInteger
."" + 42
car dans le cas de l'ajout de chaînes d'entiers, vous pourriez finir par ajouter des valeurs et ne pas le réaliser.Réponses:
Integer.toString
appelle la méthode statique dans la classeInteger
. Il n'a pas besoin d'une instance deInteger
.Si vous appelez,
new Integer(i)
vous créez une instance de typeInteger
, qui est un objet Java complet encapsulant la valeur de votre int. Ensuite, vous appelez latoString
méthode dessus pour lui demander de renvoyer une représentation sous forme de chaîne de lui - même .Si tout ce que vous voulez est d'imprimer un
int
, vous utiliserez le premier car il est plus léger, plus rapide et n'utilise pas de mémoire supplémentaire (à part la chaîne retournée).Si vous voulez un objet représentant une valeur entière - pour le mettre dans une collection par exemple - vous utiliseriez le second, car il vous donne un objet à part entière pour faire toutes sortes de choses que vous ne pouvez pas faire avec un nu
int
.la source
new Integer(i).toString()
crée d'abord un objet wrapper (redondant) autouri
(qui peut être lui-même un objet wrapperInteger
).Integer.toString(i)
est préféré car il ne crée aucun objet inutile.la source
Une autre option est la
String.valueOf
méthode statique .Cela me semble un peu plus juste que
Integer.toString(i)
moi. Lorsque le type de i change, par exemple deint
àdouble
, le code restera correct.la source
new Integer(i).toString();
Cette instruction crée l'objet de l'entier, puis appelle ses méthodes
toString(i)
pour renvoyer la représentation String de la valeur de l'entier .Integer.toString(i);
Elle retourne l'objet String représentant l'int entier spécifique (entier) , mais voici
toString(int)
unestatic
méthode.Le résumé est dans le premier cas, il renvoie la représentation de la chaîne des objets, alors que dans le second cas, il renvoie la représentation de la chaîne de l'entier.
la source
Je recommande également fortement d'utiliser
Simple et efficace.
la source
Integer.toString()
pourraient utiliser des touches supplémentaires, mais sont beaucoup plus clairs, ce qui est crucial lorsque vous souhaitez conserver le code.toString()
méthode de la variable entière ?Bien que j'aime la recommandation de fhucho
L'ironie est que cette méthode appelle en fait
Ainsi, utilisez-le
String.valueOf(i)
si vous aimez sa lecture et que vous n'avez pas besoin de radix, mais sachez également qu'il est moins efficace queInteger.toString(i)
.la source
En termes de mesure de la performance, si vous envisagez la performance temporelle, alors Integer.toString (i); coûte cher si vous appelez moins de 100 millions de fois. Sinon, s'il s'agit de plus de 100 millions d'appels, le nouveau Integer (10) .toString () fonctionnera mieux.
Ci-dessous, le code à travers lequel vous pouvez essayer de mesurer les performances,
En termes de mémoire, le
prendra plus de mémoire car il créera l'objet à chaque fois, donc la fragmentation de la mémoire se produira.
la source
new Integer(10).toString() can be simplified to Integer.toString(10)
"Meilleur:
la source
La manière simple est juste de concaténer
""
avec un entier:s
aura maintenant100
comme valeur de chaîne.la source
Ici,
Integer.toString
la méthode statique est appelée dans la classe Integer. Il ne nécessite pas que l'objet appelle.Si vous appelez,
new Integer(i)
vous créez d'abord une instance de type Integer, qui est un objet Java complet encapsulant la valeur de votre int i. Ensuite, vous appelez latoString
méthode dessus pour lui demander de renvoyer une représentation sous forme de chaîne de lui-même.la source
1.
Integer.toString(i)
2.
new Integer(i).toString()
la source