8
votes

Quelle est la différence entre les deux lignes suivantes de code Java?

Excusez-moi pour mon ignorance. Je ne pouvais pas comprendre la différence entre les lignes de code apparemment similaires suivantes.

  1. finale int num1 = 1;
  2. finale int num2; num2 = 2;

    Qu'est-ce qui rend le num2 non admissible à une constante de boîtier de commutation? xxx


5 commentaires

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?


3 Réponses :


-2
votes

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


3 commentaires

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)



7
votes

à la spécification de langue java que nous allons. commutateur code> Case Code> Les étiquettes sont définies comme xxx pré>

Votre 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>

Une expression constante de la compilation est une expression désignant une valeur de type primitif ou une chaîne code> qui ne fonctionne pas brusquement et est composé en utilisant uniquement les éléments suivants: p>


0 commentaires

0
votes

Alors, pour répondre à votre question: num1 est la constante de temps compilée, donc compilateur peut essentiellement le remplacer par 1 : xxx

Compilateur ne peut pas supposer la même chose à propos de num2 , comme expliqué avec un exemple simple ici

note, que vous auriez le même problème avec num1 , avez-vous initialisé-le avec non constant, par exemple: int num1 = nouveau aléatoire (). NEXTINT (); / code>


0 commentaires