Je me demande pourquoi la méthode String.valueOf(int i)
existe? J'utilise cette méthode pour convertir int
en String
et juste découvert la Integer.toString(int i)
méthode.
Après avoir regardé l'implémentation de ces méthodes, j'ai vu que la première appelle la seconde. En conséquence, tous mes appels String.valueOf(int i)
impliquent un appel de plus que d'appeler directementInteger.toString(int i)
Réponses:
Juste deux façons différentes de faire la même chose. Cela peut être une raison historique (je ne me souviens pas si l'un est venu avant l'autre).
la source
Dans le type String, nous avons plusieurs méthodes valueOf
Comme nous pouvons le voir, ces méthodes sont capables de résoudre toutes sortes de nombres
chaque implémentation de méthode spécifique comme vous l'avez présentée: Donc, pour les entiers, nous avons
pour double
etc
À mon avis, ce n'est pas quelque chose d'historique, mais il est plus utile pour un développeur d'utiliser la méthode
valueOf
de la classe String que du type approprié, car cela entraîne moins de modifications à apporter.Échantillon 1:
Échantillon2:
Comme nous le voyons dans l'exemple 2, nous devons faire deux changements, contrairement à l'exemple 1.
Dans ma conclusion, l'utilisation de la
valueOf
méthode de la classe String est plus flexible et c'est pourquoi elle y est disponible.la source
Integer.toString(int i, int radix)
cela sera converti en chaînes de bases autres que 10.String.valueOf(int)
, vous pouvez utiliserString.format("%d",i);
pour en savoir plus s'il vous plaît visitez ce site Web docs.oracle.com/javase/6/docs/api/java/util/Formatter.htmlint i = new Integer("1");
et vice versa.Une énorme différence est que si vous invoquez
toString()
dans un objet null, vous obtiendrez unNullPointerException
alors, en utilisantString.valueOf()
vous ne pouvez pas vérifier null.la source
Integer.toString(int i)
unestatic
méthode. Il n'y a aucunnull
objet possible.Integer i = null;
i.toString(); // Null pointer exception!!
String.valueOf(i); // No exception
String.valueOf(int i)
méthode maisString.valueOf(Object obj)
. Quoi qu'il en soit, la question porte sur lesint
valeurs primitives , là où il n'y a aucune possibiliténull
.Integer.toString()
maisInteger.toString(int i)
. C'est une méthode statique ( docs.oracle.com/javase/7/docs/api/java/lang/… ).La classe String fournit des méthodes valueOf pour tous les types primitifs et le type Object, donc je suppose que ce sont des méthodes pratiques auxquelles toutes peuvent accéder via la classe unique.
NB Profilage des résultats
Moyenne intToString = 5368 ms, moyenne stringValueOf = 5689 ms (pour 100 000 000 opérations)
la source
String j
mais ne l'utilisez jamais. Le compilateur sous-jacent peut avoir optimisé cela. Il est préférable de passer l'objet j dans une méthode différente et d'effectuer une opération factice.À partir des sources Java:
Donc, ils donnent exactement le même résultat et l'un appelle en fait l'autre. String.valueOf est plus flexible si vous pouvez modifier le type ultérieurement.
la source
Si vous regardez le code source de la
String
classe, il appelle en faitInteger.toString()
lorsque vous appelezvalueOf()
.Cela étant dit, cela
Integer.toString()
pourrait être un peu plus rapide si les appels de méthode ne sont pas optimisés au moment de la compilation (ce qu'ils sont probablement).la source
L'implémentation de ce
String.valueOf()
que vous voyez est le moyen le plus simple de respecter le contrat spécifié dans l'API: "La représentation est exactement celle renvoyée par laInteger.toString()
méthode d'un argument."la source
Pour répondre à la question des OP, c'est simplement un wrapper d'aide pour avoir l'autre appel, et cela revient au choix de style et c'est tout. Je pense qu'il y a beaucoup de désinformation ici et la meilleure chose qu'un développeur Java puisse faire est de regarder l'implémentation de chaque méthode, c'est à un ou deux clics dans n'importe quel IDE. Vous verrez clairement que cela vous
String.valueOf(int)
appelle simplementInteger.toString(int)
.Par conséquent, il n'y a absolument aucune différence, en ce sens qu'ils créent tous les deux un tampon de caractères, parcourent les chiffres du nombre, puis copient cela dans une nouvelle chaîne et la renvoient (par conséquent, chacun crée un objet String). La seule différence est un appel supplémentaire, que le compilateur élimine de toute façon en un seul appel.
Donc, peu importe ce que vous appelez, à part peut-être la cohérence du code. Quant aux commentaires sur les nulls, il faut une primitive, donc il ne peut pas être nul! Vous obtiendrez une erreur de compilation si vous n'initialisez pas l'int en cours de transmission. Il n'y a donc aucune différence dans la façon dont il gère les valeurs nulles car elles n'existent pas dans ce cas.
la source
Vous ne devriez pas vous inquiéter du fait que cet appel supplémentaire vous coûte des problèmes d'efficacité. S'il y a un coût, ce sera minime et devrait être négligeable dans une vue d'ensemble des choses.
Peut-être que la raison pour laquelle les deux existent est d'offrir une lisibilité. Dans le contexte de nombreux types en cours de conversion
String
, divers appels àString.valueOf(SomeType)
peuvent être plus lisibles que diversSomeType.toString
appels.la source
mon ouverture est valueof () toujours appelée tostring () pour la représentaion et donc pour la représentation du type primitif valueof est généralisée.et java par défaut ne prend pas en charge le type de données mais définit son travail avec objaect et class son fait tout dans cllas et fait object .here Integer.toString (int i) crée une limite de conversion pour uniquement un entier.
la source
Il n'y a aucune différence entre Integer.toString (5) et String.valueOf (5);
car String.valueOf renvoie:
etc..
la source
En utilisant la méthode String.valueOf (), vous n'avez pas à vous soucier des données (qu'elles soient int, long, char, char [], boolean, Object), vous pouvez simplement appeler:
en utilisant la seule syntaxe String.valueOf () peut tout ce que vous passez en paramètre est converti en String et renvoyé.
Sinon, si vous utilisez Integer.toString (), Float.toString () etc. (ie SomeType.toString ()) alors vous devrez vérifier le type de données du paramètre que vous voulez convertir en chaîne. Il est donc préférable d'utiliser String.valueOf () pour de telles conversions.
Si vous avez un tableau de classe d'objets qui contient différentes valeurs comme Integer, Char, Float, etc., alors en utilisant la méthode String.valueOf (), vous pouvez convertir facilement les éléments d'un tel tableau en forme de chaîne. Au contraire, si vous voulez utiliser SomeType.toString (), vous aurez d'abord besoin de connaître leurs classes de types de données (peut-être en utilisant l'opérateur "instanceOf") et ensuite vous seul pouvez procéder à un transtypage.
La méthode String.valueOf () lorsqu'elle est appelée correspond au paramètre qui est passé (que ce soit son Integer, Char, Float, etc.) et en utilisant la surcharge de méthode appelle cette méthode "valueOf ()" dont le paramètre est mis en correspondance, puis à l'intérieur de cette méthode, c'est un appel direct à la méthode "toString ()" correspondante.
Ainsi, nous pouvons voir comment la surcharge liée à la vérification du type de données et à l'appel de la méthode "toString ()" correspondante est supprimée. Il suffit d'appeler la méthode String.valueOf (), sans se soucier de ce que nous voulons convertir en String.
Conclusion: La méthode String.valueOf () a son importance juste au prix d'un appel supplémentaire.
la source
toString ()
valeur de()
gère les types primitifs ainsi que les types d'objets.
vérifiez ce lien c'est très bon. http://code4reference.com/2013/06/which-one-is-better-valueof-or-tostring/
la source