goto en Java bytecode
Examiner le code Java suivant:
outer:
for (int i = 2; i < 1000; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0)
continue outer;
}
System.out.println (i);
}
un compilateur Java peut traduire le code Java CI-DESSUS en code octet comme suit, en supposant que ce qui précède a été mis dans une méthode:
0: iconst_2
1: istore_1
2: iload_1
3: sipush 1000
6: if_icmpge 44
9: iconst_2
10: istore_2
11: iload_2
12: iload_1
13: if_icmpge 31
16: iload_1
17: iload_2
18: irem
19: ifne 25
22: goto 38
25: iinc 2, 1
28: goto 11
31: getstatic #84; //Field java/lang/System.out:Ljava/io/PrintStream;
34: iload_1
35: invokevirtual #85; //Method java/io/PrintStream.println:(I)V
38: iinc 1, 1
41: goto 2
44: return
et je remarque que le petit mot goto apparaît quelques fois, ce qui après avoir vérifié le JVM spécification valide. Ma question est pourquoi? GOTO est un mot-clé réservé mais inutilisable en Java, alors pourquoi quand nous écrivons et compilons du code java semble-t-il être compilé avec goto de nouveau dedans. Je me demande si c'est juste la façon dont les choses ont toujours été faites à un niveau inférieur de programmation, ou si c'est parce que L'on fait confiance à la JVM pour utiliser le mot goto plus efficacement. En fin de compte, je suis curieux de savoir pourquoi goto est considéré comme une si mauvaise pratique qu'il est interdit dans le code java, pourtant semble être remis directement dans votre code une fois compilé.