9 votes

Comment multiplier 10 à un objet "Integer" en Java ?

Comment multiplier 10 à un Integer et récupérer l'objet Integer objet ?

Je suis à la recherche de la meilleure façon de le faire.

Je le ferais probablement de cette façon : Obtenir int de Integer le multiplie avec l'autre int et crée un autre objet Integer avec cette valeur int.

Le code sera quelque chose comme ...

integerObj = new Integer(integerObj.intValue() * 10);

Mais, j'ai vu un code où l'auteur le fait de cette façon : Obtenir le String de la Integer concaténer "0" à la fin et obtenir ainsi Integer en utilisant Integer.parseInt

Le code est quelque chose comme ceci :

String s = integerObj + "0";
integerObj = Integer.parseInt(s);

Y a-t-il un intérêt à procéder de l'une ou l'autre manière ?

Et quel serait le moyen le plus efficace/le plus judicieux en général et dans ce cas précis ?

27voto

toolkit Points 27248

Avec la nouvelle version de Java 5 autoboxing vous pouvez simplement le faire :

Integer a = new Integer(2); // or even just Integer a = 2;
a *= 10;
System.out.println(a);

7voto

Matt Sheppard Points 32256

L'approche par les cordes est amusante, mais presque certainement une mauvaise façon de procéder.

Obtenir la valeur int d'un Integer, et en créer un nouveau sera très rapide, alors que parseInt serait assez coûteux à appeler.

Dans l'ensemble, je suis d'accord avec votre approche originale (qui, comme d'autres l'ont fait remarquer, peut être réalisée sans trop d'encombrement si vous disposez d'une boîte automatique telle qu'introduite dans Java 5).

3voto

sundae1888 Points 788

Le problème avec la deuxième méthode est la façon dont les chaînes de caractères sont traitées en Java :

  • "0" est converti en un objet String constant au moment de la compilation.

  • Chaque fois que ce code est appelé, s est construit comme un nouvel objet String, et javac convertit ce code en String s = new StringBuilder().append(integerObj.toString()).append("0").toString() (StringBuffer pour les anciennes versions). Même si vous utilisez le même integerObj c'est-à-dire,

    String s1 = integerObj + "0"; String s2 = integerObj + "0";

    (s1 == s2) serait false alors que s1.equals(s2) serait true .

  • Integer.parseInt appels internes new Integer() de toute façon, parce que Integer est immuable.

En outre, la méthode autoboxing/unboxing est identique à la première méthode.

1voto

Galbrezu Points 142

N'utilisez pas la deuxième approche, le mieux serait l'autoboxing si vous utilisez java 1.5, tout ce qui précède votre premier exemple serait le mieux.

1voto

Stephen L Points 293

La solution utilisant la méthode String n'est pas très bonne pour plusieurs raisons. Certaines sont d'ordre esthétique, d'autres sont d'ordre pratique.

D'un point de vue pratique, plus d'objets sont créés par la version String que par la forme plus normale (comme vous l'avez exprimé dans votre premier exemple).

D'un point de vue esthétique, je pense que la deuxième version masque l'intention du code, ce qui est presque aussi important que de parvenir à produire le résultat souhaité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X