188 votes

Entier.toString(int i) vs Chaîne.valueOf(int i)

Je me demande pourquoi la méthode String.valueOf(int i) existe ? J'utilise cette méthode pour convertir int en String et viens de découvrir l' Integer.toString(int i) méthode.

Après avoir examiné la mise en œuvre de ces méthodes, j'ai vu que le premier est l'appel de la deuxième. En conséquence, tous mes appels à l' String.valueOf(int i) impliquent un plus à l'appel que l'appel direct d' Integer.toString(int i)

180voto

Dans le type de Chaîne, nous avons plusieurs méthode valueOf

static String   valueOf(boolean b) 
static String   valueOf(char c) 
static String   valueOf(char[] data) 
static String   valueOf(char[] data, int offset, int count) 
static String   valueOf(double d) 
static String   valueOf(float f) 
static String   valueOf(int i) 
static String   valueOf(long l) 
static String   valueOf(Object obj) 

Comme nous pouvons le voir ces méthode sont capables de résoudre tous les types de nombres

chaque mise en œuvre de la méthode spécifique, comme tu l'as présenté: Donc, pour les entiers, nous avons

Integer.toString(int i)

pour le double

Double.toString(double d)

et ainsi de suite

À mon avis, ce n'est pas un fait historique, mais il est plus utile pour un développeur d'utiliser la méthode de valueOf de la classe String que de le bon type de, car il conduit à moins de changements pour nous de faire.

Exemple 1:

public String doStaff(int num) {

 //Do something with num 

  return String.valueOf(num);

 }

Sample2:

public String doStaff(int num) {

 //Do somenthing with num

 return Integer.toString(num);

 }

Comme nous le voyons dans l'exemple 2, nous avons à faire à deux changements, contrairement à l'échantillon.

Dans ma conclusion, à l'aide de l' valueOf méthode de la classe String est plus souple et c'est pourquoi il y est disponible.

56voto

A Costa Points 407

Une énorme différence, c'est que si vous appelez toString() dans un objet nul, vous obtiendrez un NullPointerException alors que, à l'aide de String.valueOf() vous ne pouvez pas vérifier la valeur null.

48voto

mipadi Points 135410

Juste deux façons différentes de faire la même chose. Il est peut-être une raison historique (ne me souviens pas si on y est arrivé avant l'autre).

13voto

Kingo Points 172

La classe String fournit valueOf méthodes pour tous les types primitifs et le type d'Objet, donc je suppose qu'ils sont des méthodes pratiques qui peuvent être accessibles par le biais de la seule classe.

NB de Profilage des résultats

Moyenne intToString = 5368ms, Moyenne stringValueOf = 5689ms (pour 100 000 000 d'opérations)

public class StringIntTest {


    public static long intToString () {
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            String j = Integer.toString(i);
        }
        long finishTime = System.currentTimeMillis();

        return finishTime - startTime;
    }

    public static long stringValueOf () {

        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            String j = String.valueOf(i);
        }
        long finishTime = System.currentTimeMillis();

        return finishTime - startTime;
    }

    public static void main(String[] args) {
        long intToStringElapsed = 0;
        long stringValueOfElapsed = 0;
        for (int i = 0; i < 10; i++) {
            intToStringElapsed += intToString();
            stringValueOfElapsed+= stringValueOf();
        }
        System.out.println("Average intToString = "+ (intToStringElapsed /10));
        System.out.println("Average stringValueOf = " +(stringValueOfElapsed / 10));
    }
}

8voto

tskuzzy Points 19279

Si vous regardez le code source de l' String d'une classe, il fait des appels Integer.toString() lorsque vous appelez valueOf(). Source

Cela étant dit, Integer.toString() peut-être un peu plus vite si les appels de méthode ne sont pas optimisées au moment de la compilation (qui ils sont sans doute).

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