je le fragment de code Java suivantJAVA: si sans accolades, et la relation de continuer
while (condition1){
switch (someinteger){
case 1:
if(condition2) continue;
// other stuff here
break;
// other cases here
}
}
Tout est bien. Lorsque je génère un fichier de classe, puis que je le décompile à l'aide d'un outil gratuit (JD-gui), je récupère le code suivant.
while (condition1){
switch (someinteger){
case 1:
if(!condition2);
// other stuff here
break;
// other cases here
}
}
Il change if(condition2) continue;
-if(!condition2);
Je ne pouvais trouver aucune information sur l'autre instruction if (sans accolades). Quelqu'un peut-il expliquer la logique ici? Merci d'avance.
EDIT: J'ai fait d'autres tests et le décompilateur ne fonctionne pas correctement.
est ici le code avant:
public void strip(InputStreamReader f1, OutputStreamWriter f2) throws IOException{
int commentON=0, quoteON=0;
int b1;
while ((b1 = f1.read()) != -1){
switch ((char) b1){
case '\\':
if (commentON==0){
quoteON = 1;
break;
}
continue;
case '\n':
if (commentON>0){ commentON=0; continue; }
break;
case '%':
if (commentON>0) continue;
if (quoteON>0) { quoteON=0; break; }
commentON=2;
continue;
default:
if (commentON>0) continue;
if (quoteON>0) quoteON=0;
break;
}
f2.write(b1);
}
}
est ici le code décompilé
public void strip(InputStreamReader f1, OutputStreamWriter f2) throws IOException
{
int commentON = 0; int quoteON = 0;
while ((b1 = f1.read()) != -1)
{
int b1;
switch ((char)b1)
{
case '\\':
if (commentON == 0);
quoteON = 1;
break;
case '\n':
if (commentON <= 0) break label109; commentON = 0; break;
case '%':
if (commentON <= 0);
if (quoteON > 0) { quoteON = 0; break label109: }
commentON = 2;
break;
}
if (commentON <= 0);
if (quoteON > 0) quoteON = 0;
label109: f2.write(b1);
}
}
désolé pour embêter tout le monde. : P Je vais essayer de supprimer cette question si je peux.
BTW ... je ne discute pas de l'exactitude du code décompilé. Je suis juste surpris que 'si (condition2) continue;' est la même chose que 'if (! Condition2);' Cela signifie-t-il que l'exécution continue automatiquement du bon point (dans ce cas, le début de la boucle while))? – Jus12
Est-ce juste moi ou ne sont-ils pas logiquement les mêmes? Dans le premier ensemble de code si 'condition1 = true' et' someInteger = 1' et 'condition2 = true' alors ' // autres choses ici' * ne seront pas * exécutées. Mais dans le deuxième bloc de code avec les mêmes conditions '// autres choses ici' * sera * exécuté. – David
@David - Je suis avec vous, je ne le vois pas. – danben