Integer.toSsortingng (int i) vs Ssortingng.valueOf (int i)

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

Après avoir examiné la mise en œuvre de ces méthodes, j’ai vu que la première appelait la seconde. En conséquence, tous mes appels à Ssortingng.valueOf(int i) impliquent un appel de plus que l’appel direct à Integer.toSsortingng(int i)

Juste deux façons différentes de faire la même chose. C’est peut-être une raison historique (je ne me souviens pas si l’un est venu avant l’autre).

Dans le type Ssortingng, nous avons plusieurs méthodes valueOf

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

Comme nous pouvons voir ces méthodes sont capables de résoudre toutes sortes de nombres

chaque mise en œuvre de méthode spécifique comme vous l’avez présenté: Donc, pour les entiers, nous avons

 Integer.toSsortingng(int i) 

pour double

 Double.toSsortingng(double d) 

etc

A mon avis, ce n’est pas une chose historique, mais il est plus utile pour un développeur d’utiliser la méthode valueOf de la classe Ssortingng que du type approprié, car cela conduit à moins de modifications à apporter.

Échantillon 1:

 public Ssortingng doStuff(int num) { // Do something with num... return Ssortingng.valueOf(num); } 

Échantillon2:

 public Ssortingng doStuff(int num) { // Do something with num... return Integer.toSsortingng(num); } 

Comme nous le voyons dans l’échantillon 2, nous devons faire deux changements, contrairement à celui de l’échantillon.

En conclusion, l’utilisation de la méthode valueOf de la classe Ssortingng est plus flexible et c’est pourquoi elle est disponible ici.

Une différence énorme est que si vous appelez toSsortingng() dans un object null, vous obtiendrez une Ssortingng.valueOf() NullPointerException alors que, en utilisant Ssortingng.valueOf() vous ne pourrez pas rechercher la valeur null.

La classe Ssortingng fournit des méthodes valueOf pour tous les types primitifs et tous les types d’object. Je suppose donc que ce sont des méthodes pratiques accessibles via une classe.

NB Résultats de profilage

IntToSsortingng moyen = 5368ms, SsortingngValueOf moyenne = 5689ms (pour 100.000.000 opérations)

 public class SsortingngIntTest { public static long intToSsortingng () { 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)); } } 

Si vous regardez le code source de la classe Ssortingng , il appelle en réalité Integer.toSsortingng() lorsque vous appelez valueOf() .

Cela étant dit, Integer.toSsortingng() pourrait être un peu plus rapide si les appels de méthode ne sont pas optimisés au moment de la compilation (ce qui est probablement le cas).

A partir des sources Java:

 /** * Returns the ssortingng representation of the {@code int} argument. * 

* The representation is exactly the one returned by the * {@code Integer.toSsortingng} method of one argument. * * @param i an {@code int}. * @return a ssortingng representation of the {@code int} argument. * @see java.lang.Integer#toSsortingng(int, int) */ public static Ssortingng valueOf(int i) { return Integer.toSsortingng(i); }

Ils donnent donc exactement le même résultat et l’un appelle en fait l’autre. Ssortingng.valueOf est plus flexible si vous modifiez le type ultérieurement.

L’implémentation de Ssortingng.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 la méthode Integer.toSsortingng() d’un argument.”

Pour répondre à la question des OP, il s’agit simplement d’un wrapper auxiliaire pour avoir l’autre appel, et cela revient au choix du style. 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, il y a un ou deux clics dans n’importe quel IDE. Vous verrez clairement que Ssortingng.valueOf(int) appelle simplement Integer.toSsortingng(int) pour vous.

Par conséquent, il n’y a absolument aucune différence, car ils créent tous les deux un tampon de caractères, parcourent les chiffres du numéro, puis le copient dans une nouvelle chaîne et le renvoient (par conséquent, chacun crée un object Ssortingng). La seule différence est un appel supplémentaire, que le compilateur élimine de toute façon pour un seul appel.

Donc, peu importe ce que vous appelez, à part peut-être la cohérence du code. En ce qui concerne les commentaires sur les valeurs NULL, il faut une primitive, donc ça ne peut pas être nul! Vous obtiendrez une erreur à la compilation si vous n’initialisez pas le int en cours de transmission. Il n’y a donc pas de différence dans la façon dont il gère les valeurs NULL, car elles sont inexistantes dans ce cas.

Vous ne devriez pas vous inquiéter de cet appel supplémentaire qui vous coûterait des problèmes d’efficacité. S’il y a un coût, cela sera minime et devrait être négligeable dans le tableau d’ensemble.

Peut-être la raison pour laquelle les deux existent est d’offrir une lisibilité. Dans le contexte de nombreux types convertis en Ssortingng , différents appels à Ssortingng.valueOf(SomeType) peuvent être plus lisibles que divers appels à SomeType.toSsortingng .

Il n’y a pas de différences entre Integer.toSsortingng (5) et Ssortingng.valueOf (5);

car Ssortingng.valueOf renvoie:

 public static Ssortingng valueOf(int i) { return Integer.toSsortingng(i); } public static Ssortingng valueOf(float f) { return Float.toSsortingng(f); } 

etc..

En utilisant la méthode Ssortingng.valueOf (), vous n’avez pas à vous soucier des données (que ce soit int, long, char, char [], booléen, Object), vous pouvez simplement appeler:

  • static Ssortingng valueOf ()

en utilisant la seule syntaxe Ssortingng.valueOf (), tout ce que vous passez en tant que paramètre est converti en Ssortingng et renvoyé.

Sinon, si vous utilisez Integer.toSsortingng (), Float.toSsortingng () etc. (par exemple SomeType.toSsortingng ()), vous devrez alors vérifier le type de données du paramètre que vous souhaitez convertir en chaîne. Il est donc préférable d’utiliser Ssortingng.valueOf () pour de telles conversions.

Si vous avez un tableau de classes d’objects contenant des valeurs différentes comme Integer, Char, Float, etc., en utilisant la méthode Ssortingng.valueOf (), vous pouvez facilement convertir les éléments d’un tel tableau en Ssortingng. Au contraire, si vous voulez utiliser SomeType.toSsortingng (), vous devrez d’abord connaître leurs classes de types de données (peut-être en utilisant l’opérateur “instanceOf”) et vous ne pourrez continuer que pour un transtypage.

Ssortingng.valueOf () lorsque appelée correspond au paramètre qui est passé (que ce soit son entier, son char, son flottant, etc.) et en utilisant des appels de surcharge de méthode cette méthode “valueOf ()” dont le paramètre est mis en correspondance, puis dans cette méthode un appel direct à la méthode “toSsortingng ()” correspondante.

Donc, nous pouvons voir comment la surcharge de vérification du type de données et l’appel de la méthode “toSsortingng ()” correspondante sont supprimés. Il suffit d’appeler la méthode Ssortingng.valueOf () sans se soucier de ce que nous voulons convertir en Ssortingng.

Conclusion: La méthode Ssortingng.valueOf () a son importance au prix d’un appel supplémentaire.

mon openion est valueof () toujours appelé tossortingng () pour la représentation et donc pour la représentation de type primtif valeurof est généralisé.et java par défaut ne supporte pas le type de données mais il définit son travail avec objaect et classe tout fait en cllas et fait object .here Integer.toSsortingng (int i) crée une limite pour cette conversion uniquement pour un entier.

toSsortingng ()

  1. est présent dans la classe Object, généralement substitué dans la classe dérivée
  2. typecast vers la classe appropriée est nécessaire pour appeler la méthode toSsortingng ().

valeur de()

  1. Méthode statique surchargée présente dans la classe Ssortingng.
  2. gère les types primitifs ainsi que les types d’objects.

     Integer a = null; System.out.println(Integer.toSsortingng()) ; NUll pointer exception System.out.println(Ssortingng.valueOf() ; give NULL as value 

vérifier ce lien est très bon. http://code4reference.com/2013/06/which-one-is-better-valueof-or-tossortingng/