Question

Edité cette question à cause de mes mauvais exemples .. Voici ma question mise à jour:

Ne serait-ce qui suit est égale à la répartition de la vitesse et de la mémoire:

int b;
for (int i = 0; i < 1000; i++)
    b = i;

et

for (int i = 0; i < 1000; i++)
    int b = i;
Était-ce utile?

La solution

Non, ce ne serait pas.

Dans le premier cas, vous avez une variable qui est attribué 1000 valeurs différentes -. Et vous finissez par être en mesure de mettre la main sur la dernière valeur (999) après que le constructeur a terminé

Dans le second cas, vous appelez une méthode essentiellement sans op 1000 fois. La seconde méthode n'a pas d'effets secondaires et n'a pas de valeur de retour, il est donc inutile. La variable locale ne « existe » pour la durée de l'appel de méthode, alors que la variable d'instance dans le premier exemple fait partie de l'objet, donc survivra.

Notez que cela ne se limite pas aux primitives - tout autre type se comporterait de la même manière trop

.

Autres conseils

  • Oui. Les deux d'entre eux sont tout à fait inutiles.
  • Non. la taille de l'instance de Class1 est supérieure à la taille de l'instance de Classe2, en raison de la variable membre.

La réponse dépend de ce que vous entendez en disant « égal » =)

Non .

  • Dans Class1 la a variable est un champ, accessible par toutes les méthodes de la classe.
  • Dans Class2 ce n'est pas le cas: a est une variable locale dans la méthode assign. Après finitions assign, la valeur de a est mis au rebut.

Non, on a une instance a variable (Class1), et on n'a pas.

Dans le premier cas, vous avez déjà déclaré b comme int et sa valeur est mis à jour chaque fois que la boucle est exécutée. Dans le second, b est déclarée et initialisée à la valeur de i à chaque fois que la boucle est exécutée. Je ne suis pas sûr à 100% mais je pense que le second est plus gourmand en mémoire mais je ne pense pas que la différence de vitesse serait perceptible.

Il convient de noter que tout compilateur vaut son sel, et je crois fermement le JIT être vaut beaucoup de sel, serait tout simplement mis de côté l'espace pour « b » Une fois dans le deuxième cas, la phase « déclaration » serait dépourvue de sens .

Avez-vous essayé cela? Il n'a même pas compilé!

for (int i = 0; i < 1000; i++)
    int b = i;

Messages d'erreur du compilateur:

Example.java:4: '.class' expected
                    int b = i;
                        ^
Example.java:4: not a statement
                    int b = i;
                    ^
Example.java:4: illegal start of expression
                    int b = i;
                          ^

Le corps d'une boucle doit contenir au moins une instruction. Une déclaration variable n'est pas une déclaration, donc une boucle avec juste une déclaration de variable est invalide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top