Excusez-moi pour mon ignorance. Je ne pouvais pas comprendre la différence entre les lignes de code apparemment similaires suivantes.
finale int num1 = 1; code> li>
-
finale int num2; code> num2 = 2; code> li>
ol> Qu'est-ce qui rend le num2 code> non admissible à une constante de boîtier de commutation? p> xxx pré> p>
3 Réponses :
Dans Num1, vous l'initialisez tout de suite, dans NUM2, vous n'avez pas tout de suite, vous vous attribuez sa valeur plus tard sur p>
Il est clair comme le jour de la lumière du jour. Mais quel est le point dans Num2 ne peut-il pas être éligible aussi constant dans un étui de commutation?
@Phoenix C'est parce que les instructions de compilateur et de commutation sont sensibles au type et en la finalisant, vous vous assurez qu'il ne peut pas changer de valeur ni de type. Comme si vous l'utilisez sur un JCOMBOBOX, vous devez spécifier la case pour être finale avant de pouvoir exécuter une instruction de commutation.
Je n'ai pas acheté cette explication ... la question est bonne, cette explication manque de référence (à la JLS, probablement)
à la spécification de langue java que nous allons. Votre Une expression constante de la compilation est une expression désignant une valeur
de type primitif ou une chaîne donc la primitive maintenant nous voulons connaître la relation avec l'utilisation de a blanc em> une variable de type primitif ou de type de sorte que la dernière citation fait référence à un non- blank em> SO P> commutateur code> Case Code> Les étiquettes sont définies comme num code> ne se réfère pas à un nom Enum code> Nom constant, donc Ignorons ça. Qu'est-ce qu'un constanteXpressions code> a >? Le JLS le définit à nouveau p>
code> qui ne fonctionne pas brusquement et est
composé en utilisant uniquement les éléments suivants: p>
int code> la valeur 2 code> est une expression constante. Vous pouvez faire p> final code> et
final code> est une variable finale code> dont la déclaration manque d'initialisateur.
[...] p>
chaîne code>, c'est final code> et
initialisé avec une expression constante du temps de compilation (§15.28), est
appelé une variable constante final code> variable, c'est-à-dire. celui qui a un initialiseur. p> final int num2;
num2 = 2;
Alors, pour répondre à votre question: Compilateur ne peut pas supposer la même chose à propos de note, que vous auriez le même problème avec num1 code> est la constante de temps compilée, donc compilateur peut essentiellement le remplacer par 1 code>: num2 code>, comme expliqué avec un exemple simple ici P > num1 code>, avez-vous initialisé-le avec non constant, par exemple: int num1 = nouveau aléatoire (). NEXTINT (); / code> p> p>
Pouvez-vous nous montrer comment vous utilisez cela que vous obtenez une erreur? Tant que vous déclarez et initialisez num2 avant de l'allumer, il ne devrait pas y avoir de problème.
Les réponses ici et la discussion dans les commentaires peuvent aider: Stackoverflow.com/questions/16255270/... le marquent également comme duplicata.
Yep, Ce est la réponse. Num1 est la constante de temps de compilation, tandis que NUM2 n'est pas.
@ Nicoláscarlo signifie-t-il que NUM2 n'est pas attribué une valeur au moment de la compilation?
@Phoenix Oui, Num2 n'est pas affecté à l'heure de la compilation. C'est fait le temps d'exécution. Es-tu clair maintenant?