J'ai récemment couru à travers une classe qui avait le champ suivant déclaré:différences de performance entre les champs primitifs finaux statiques et non statiques en Java
private final int period = 1000;
Dans ce cas particulier, l'auteur avait voulu qu'il soit aussi statique et comme la valeur ne pouvait être modifiée à aucun moment, il n'y avait aucune raison fonctionnelle réelle de ne pas la déclarer statique, mais j'ai commencé à me demander comment Java traitait les primitives statiques finales et finales.
En particulier:
1) Comment sont primitives statiques finales stockées? Sont-ils simplement compilés directement dans les expressions dans lesquelles ils sont utilisés?
2) Si elles sont réellement allouées au stockage, chaque instance de la classe conteneur doit-elle maintenir une référence à cet emplacement? (dans ce cas, pour les primitives de moins de 4 octets, chaque instance de la classe serait réellement plus grande que si elle incluait simplement la primitive directement comme dans le cas non-statique)
3) Les compilateurs sont-ils intelligents? Assez pour déterminer que dans des cas comme celui ci-dessus, la variable est «effectivement statique» puisqu'il serait impossible de faire en sorte que différentes instances contiennent des valeurs différentes et donc de l'optimiser de manière similaire à une variable statique finale?
Re: # 3, je ne m'attendais pas vraiment à des différences de performance en termes de vitesse mais je ne savais pas si mon optimise en ne le stockant pas par instance a les champs finals statiques réels. Avec le recul, la différence de performance est probablement un abus de langage. Merci pour la clarification – Dusty