Parfois, Java m'interpelle.
J'ai une énorme quantité d'initialisations à effectuer int .
Quelle est la différence réelle ?
Integer.toString(i)
new Integer(i).toString()
Integer.toString
appelle 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 complet Java encapsulant la valeur de votre int. Ensuite, vous appelez la méthode toString
pour lui demander de renvoyer une représentation sous forme de chaîne de lui-même .
Si tout ce que vous voulez, c'est imprimer un int
, vous utiliseriez le premier parce qu'il est plus léger, plus rapide et n'utilise pas de mémoire supplémentaire (à l'exception de la chaîne renvoyée).
Si vous voulez un objet représentant une valeur entière - pour le placer par exemple dans une collection -, 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 une simple int
.
new Integer(i).toString()
crée d'abord un objet wrapper (redondant) autour de i
(qui peut être lui-même un objet wrapper Integer
).
Integer.toString(i)
est préférable car il ne crée aucun objet inutile.
Une autre option est la méthode statique String.valueOf
.
_String.valueOf(i)
_
Il me semble légèrement plus droit que Integer.toString(i)
. Lorsque le type de i change, par exemple de int
à double
, le code reste correct.
Je recommande aussi fortement d'utiliser
int integer = 42;
String string = integer + "";
Simple et efficace.
new Integer(i).toString();
Cette instruction crée l'objet de l'entier, puis appelle ses méthodes toString(i)
à retourne la représentation sous forme de chaîne de la valeur de l'entier.
Integer.toString(i);
Il retourne l’objet String représentant le int spécifique (entier), mais ici toString(int)
est une méthode static
.
Summary est dans le premier cas, il retourne la représentation sous forme de chaîne des objets, tandis que dans le second cas, il retourne la représentation sous forme de chaîne sous forme d'entier.
Bien que j'aime la recommandation de fhucho de
String.valueOf(i)
L'ironie est que cette méthode appelle en réalité
Integer.toString(i)
Ainsi, utilisez String.valueOf(i)
si vous aimez la 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 considérez la performance en termes de temps, le message Integer.toString (i); est cher si vous appelez moins de 100 millions de fois. Sinon, s'il y a plus de 100 millions d'appels, le nouvel Integer (10) .toString () fonctionnera mieux.
Ci-dessous, le code à travers vous pouvez essayer de mesurer la performance,
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 termes de mémoire, le
nouvel entier (i) .toString ();
prendra plus de mémoire car il créera l'objet à chaque fois, ainsi la fragmentation de la mémoire se produira.
Une façon simple est de concaténer ""
avec un entier:
int i = 100;
String s = "" + i;
maintenant s
aura 100
comme valeur de chaîne.
Mieux:
Integer.valueOf(i).toString()
Ici, Integer.toString
appelle la méthode statique de 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 complet Java encapsulant la valeur de votre int i. Ensuite, vous appelez la méthode toString
pour lui demander de renvoyer une représentation sous forme de chaîne.
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