Selon mon expérimentation scientifique Java, int x = 0; code> est équivalent à int x = 0 ;; code> qui est équivalent à int x = 0; ;;;;;;;;;;;;;;; code> p>
4 Réponses :
Les points-virgules supplémentaires sont traités comme des déclarations vides. Les déclarations vides ne font rien, c'est pourquoi Java ne se plaint pas de cela. P>
Oui, ce sont des déclarations vides, qui ne font rien du tout. Ils sont optimisés par le compilateur, mais dans certains cas, cette déclaration vide fait effectivement quelque chose, faisant la même chose qu'un ensemble d'accolades vides ( ceci va boucler jusqu'à ce que peut causer un peu Résultats déroulants. L'instruction {} code>). Ils sont hérités de la syntaxe C, mais ils ont peu d'utilisations en Java. En C, fait parfois quelque chose comme ceci était utile: condition code> est faux, empêchant le code de progresser. Cependant, cela est découragé dans le code moderne et ne devrait jamais être utilisé vraiment en Java. Cependant, la déclaration vide ne compte em> compte comme une déclaration, juste une déclaration inutile, donc construit comme ceci: p> si code> appelle l'instruction vide, pas la méthode, la méthode sera donc toujours em> être appelée. Juste une mise en garde à garder à l'esprit. P> p>
+1, mais je suis sûr que le compilateur optimise (supprime) les déclarations vides.
@Jeremy pas aussi, les déclarations vides sont laissées dans la mesure où elles font, en fait, font quelque chose. Ils comptent techniquement comme des déclarations, ils ne font que rien. C'est différent de l'enlèvement complet des déclarations elles-mêmes.
Compilation Ces deux classes produisent exactement le même bytecode (à l'exception du nom de la classe). Le demi-point à la fin du tandis que (vrai); code> n'est pas une déclaration vide. Il termine la boucle tandis que la boucle avec un bloc.
@Jeremy assez juste. Il semblerait que je me trompe. Certes, je ne sais pas où j'ai eu cette information, mais quelque part là-bas, quelqu'un a fourni de fausses informations. Tant pis.
@Jeremy je n'ai pas, désolé si cela ressemblait comme si j'étais. Merci pour la correction. :)
@Jeremyheiler "Le point-virgule à la fin du moment (vrai); n'est pas une déclaration vide. Il termine la boucle tandis que la boucle sans blocage" - selon la spécification de langue Java, ceci est définitivement faux. pendant que code> doit se terminer par une autre déclaration, il n'y a pas d'exception. Quels que soient les points-virgules, ils n'appartiennent pas au pendant la déclaration code>. C'est un différend étrange, cependant, des déclarations vides ne produisent tout simplement rien dans le code d'octet. Il est donc plutôt étrange de parler de leur rétention ou de leur retrait.
@Malcolm, mon point était i> que les déclarations vides n'existent pas en bytecode. Peut-être que mon raisonnement était un peu désactivé, mais j'ai eu l'impression que Jake disait des déclarations vides produites par la bytecode. Quoi qu'il en soit, merci de me forcer à la regarder! Voici la référence pour personne qui se soucie < / a>
@Jeremyheiler Oui, ma correction n'est que sur la langue. C'est génial que vous avez fourni un lien, c'est exactement ce que j'ai mentionné. La réponse a toujours l'air un peu étrange à mon esprit. Je ne dirais pas que les déclarations vides sont "optimisées", il n'y a tout simplement rien à supprimer.
Comme Jake King écrit, vous pouvez produire des déclarations vides pour ne rien faire dans une boucle:
public class Empty
{
public static void main (String args[])
{
System.out.println ("Just semicolons");;
}
}
C peut même faire tandis que (condition); code> qui est également exécuté comme une déclaration.
Dans les très rares cas que l'on a besoin d'un bloc d'instructions vides pendant la boucle, je trouve mieux de l'écrire comme une incarnation de tandis que (condition) {} code> plutôt que (un commentaire lancé est un autre bon moyen de le faire). Le point-virgule peut facilement être négligé, mais les accolades sont explicites. aussi b>, tandis que je ne dirai pas de ne pas utiliser une fonctionnalité de langue, car quelqu'un pourrait ne pas le savoir, un terminateur de déclaration apparemment errant est un barrage mental, qui est souvent mieux évité afin de faciliter la compréhension de la compréhension de la code.
Une chose à noter est que si vous faites quelque chose comme ça:
public int foo()
{
return(0);;
}
Je ne peux pas penser à une langue qui n'autorise pas les déclarations vides (tant qu'il est possible de les écrire en premier lieu.)
@Truthéality, ADA n'autorise pas les déclarations vides. Pour indiquer explicitement une déclaration vide, vous écrivez «null». Voir archive.adaic.com/standards/83rat/html/ratl -03-07.html pour un exemple.