0
votes

Différence entre une variable finale et une constante?

Je suis un java d'apprentissage débutant actuellement en cours d'introduction faire la construction de commutateurs / cas. Le livre que je lis utilise l'exemple suivant:

int eingabe = 256; 
final byte einKleinesByte = 2; 
final char einKleinerCharacter = 'c'; 
final short einKleinesShort = 500; 
switch(eingabe) {
case einKleinesByte: 
case einKleinerCharacter: 
case einKleinesShort: 


3 commentaires

Si vous définissez quelque chose comme ceci: octet ein_kleines_byte = 2; - Ce n'est pas constant. Seule la finale de mot clé peut le rendre constant


Par octet ein_kleines_byte = 2 , avez-vous voulu dire statique final octet ein_kleines_byte = 2 ?


Pensant à Java (quatrième édition)> Le mot-clé de Java's Final a des significations légèrement différentes selon> Le contexte, mais en général, il ne peut pas être changé. " >> Une constante est utile pour deux raisons:> 1. Cela peut être une constante de temps de compilation qui ne changera jamais. > 2. Cela peut être une valeur initialisée au moment de l'exécution que vous ne voulez pas changer.


4 Réponses :


0
votes

La principale différence entre variable finale et constante (statique et finale) est que si vous créez une variable finale sans mot clé statique, bien que sa valeur soit non modifiable, une copie séparée de la variable est créée chaque fois que vous créez un nouvel objet. Où une constante est non modifiable et n'a qu'un seul copie au cours du programme.


12 commentaires

pas entièrement. Cela signifie simplement que la «constante» existerait dans une portée inférieure. En outre, simplement parce qu'une variable est déclarée finale, cela ne signifie pas automatiquement que vous ne pouvez pas modifier sa valeur.


Merci pour la mise à jour!!


@Sultuske "où une constante est non modifiable et n'a qu'un seul copie au cours du programme." - Vous vous référez à statique et finale, non? Donc, si je comprends bien correctement: finale = plusieurs copies sont possibles si plusieurs objets sont créés. At-ils tous avoir la même valeur ou la valeur diffère pour les différents objets? finale statique = il n'y a qu'une seule constante existante et la valeur ne peut pas être modifiée


C'est ce que je voulais dire


UPS, oui, tagué le mauvais utilisateur ... ça va super :-D merci les deux!


Une seule dernière chose - que les valeurs de la variable finale soient-elles différentes si plusieurs entités sont créées?


@Emiliyanakalinova final signifie que vous ne pouvez pas repousser la variable, il ne signifie pas (toujours) que vous ne pouvez pas changer sa valeur. Donc, selon le contexte, afin de parler d'une constante, il devrait être final (vous ne pouvez pas modifier la variable pour une autre variable), immuable (vous ne pouvez pas modifier son état / valeur) et Static public (un seul Copier pour l'ensemble de l'application


@Sultuske Je pense que vous ne pouvez même pas modifier la valeur de la variable finale. Essayez de déclarer finale int i = 0 et do i ++ il donnera une erreur. Voir ici TPCG.IO/SN7OPJQE


@Emiliyanakalinova Oui Les valeurs de la variable finale peuvent être différentes si plusieurs entités sont créées.


@Chisisjaymehta Il n'a rien à voir avec ça. Votre exemple est un type primitif. S'il s'agit d'une instance d'une classe, qui a des setters, vous ne pouvez pas attribuer une nouvelle instance à la variable, mais vous pouvez modifier l'état (valeur) via ses configurateurs.


@Sultuske je l'ai eu. Donc, si nous fabriquons un objet final, il indiquera que le même objet une fois attribué et ne peut pas être référencé à un autre objet. Mais les paramètres de cet objet peuvent changer.


@thisisjaymehta Oui. S'il s'agit d'un type primitif, ou lorsqu'il s'agit d'un type immuable, cela en fait un peu une manière constante à la fois comme objet et valeur, sinon, il peut être considéré comme une constante, car il reste le même objet, mais la valeur peut changer



0
votes

Ils ne sont pas les deux définis comme constants em>. Vous pouvez facilement modifier la valeur du octet ein_kleines_byte code>. Vous utilisez la norme majuscule serpent qui est généralement utilisée pour définir constante mais en réalité, il n'ya rien qui vous empêche de changer la valeur de cette variable. Seul le keyworld final code> éviterait cela.

// would work fine
int MY_CONSTANT = 2;
MY_CONSTANT = 3

// Will throw an error
final int myConstant = 2;
myConstant = 3

// recommended 
static final int MY_CONSTANT = 2


0 commentaires

0
votes

octet ein_kleines_byte n'est pas une constante, il peut être écrasé.

final octet ein_kleines_byte ne peut pas être, c'est une constante.

Une variable finale ne peut pas être réaffectée. Pour les types primitifs ou pour les types inchangés, cela signifie qu'ils sont constants en valeur. Pour la plupart des objets, ce n'est pas le cas. Vous pouvez modifier l'état (valeur) de ces objets, mais vous ne pouvez pas modifier l'objet lui-même pour un autre.

Juste en mettant un nom de variable en majuscule, ne fait pas une constante.

Edit: Si vous souhaitez qu'une variable finale soit la même pour l'ensemble de l'application, vous devrez le déclarer aussi statique.


9 commentaires

Je pense que ce qu'elle voulait réellement demander est la différence entre final octet eulesinesbyte = 2 (défini comme un var) et statique finale EIN_KLEINES_BYTE = 2 est.


@Zhekakozlov vérifie la dernière phrase de la question, la statique-non statique n'est pas la question de la question à propos de


La question portait sur les constantes, pas sur l'accès des champs de classe


@AlexRMCF Pour citer la PO / la question elle-même: "Ma question est, quelle est la différence entre les octets finaux Etuletinesbyte = 2; et l'octet ein_kleines_byte = 2; comme ils sont tous deux définis comme des constantes?" Non, la question ne concerne pas les constantes, il s'agit de la compréhension des constantes de l'OP (erronée).


Mon commentaire était pour @zhekakozlov


Je me suis trompé la convention Java de toutes les capuchons (Ein Kleines Byte) pour pouvoir définir une valeur constante (blush). Je suis au tout début, donc je ne suis pas encore aux cours et à l'accès de la classe, etc. :-)


@Emiliyanakalinova, c'était ma première pensée quand j'ai vu votre question)


@AlexRMCF Mon erreur :)


@Zhekakozlov Le mot clé statique est tout à fait sans importance ici. final octet eoirinesbyte = 2; , défini comme une variable locale, est toujours une constante de temps de compilation. C'est pourquoi il est autorisé comme étiquette étiquette dans une instruction , comme dans le code de l'OP, mais également dans les annotations, pour nommer un autre cas où il compte. En revanche, sans le mot clé final , il n'est pas, même si vous le déclarez comme statique variable.



0
votes

final signifie simplement que la valeur, une fois attribuée, ne peut pas être modifiée ou réaffectée

En ce qui concerne les constantes, je vous référerais à Question


1 commentaires

N'oubliez pas que pour la plupart des objets, la valeur peut être modifiée, même si elle est déclarée finale.