Duplicate possible:
attribut statique final final vs attribut final privé
Quelle est la différence entre déclarer une variable en tant que
static final int x = 5;
ou
final int x = 5;
Si je veux seulement que la variable soit locale et constante (ne peut pas être modifiée plus tard)?
Merci
Le simple fait d'avoir final
aura l'effet escompté.
final int x = 5;
...
x = 10; // this will cause a compilation error because x is final
Déclarer static, c'est en faire une variable de classe, le rendre accessible en utilisant le nom de classe <ClassName>.x
Déclarer le champ comme "final" assurera que le champ est une constante et ne peut pas changer. La différence vient de l'utilisation du mot clé 'statique'.
Déclarer un champ comme statique signifie qu'il est associé au type et non aux instances. c'est-à-dire qu'une seule copie du champ sera présente pour tous les objets et non une copie individuelle pour chaque objet. De ce fait, les champs statiques sont accessibles via le nom de la classe.
Comme vous pouvez le constater, votre exigence selon laquelle le champ doit être constant est remplie dans les deux cas (en déclarant le champ comme "final" et comme "statique final").
Une question similaire est attribut statique final privé vs attribut final privé
J'espère que ça aide
Dans la première instruction, vous définissez la variable commune à tous les objets (champ statique de classe).
Dans la deuxième instruction, vous définissez la variable qui appartient à chaque objet créé (beaucoup de copies).
Dans votre cas, vous devriez utiliser le premier.
Pour les types primitifs, le "statique final" sera une déclaration appropriée pour déclarer une constante. Une variable finale non statique a du sens quand il s’agit d’une référence constante à un objet. Dans ce cas, chaque instance peut contenir sa propre référence, comme indiqué dans JLS 4.5.4 .
Voir la réponse de Pavel pour la réponse correcte.