我有下面的Java代碼片斷JAVA:如果沒有大括號,並就繼續
while (condition1){
switch (someinteger){
case 1:
if(condition2) continue;
// other stuff here
break;
// other cases here
}
}
一切都很好。當我生成一個類文件,然後使用免費工具(JD-gui)對其進行反編譯時,我找回了下面的代碼。
while (condition1){
switch (someinteger){
case 1:
if(!condition2);
// other stuff here
break;
// other cases here
}
}
所以它的變化if(condition2) continue;
到if(!condition2);
我無法找到其他任何信息if語句(不含括號)。 任何人都可以在這裏解釋邏輯嗎?提前致謝。
編輯:我做了一些更多的測試,反編譯器無法正常工作。
這裏是之前的代碼:
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);
}
}
這裏是反編譯的代碼
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);
}
}
抱歉打擾大家。 :P 如果可以,我會嘗試刪除此問題。
順便說一句...即時通訊不爭論反編譯代碼的正確性。我只是感到驚訝,如果(條件2)繼續;'是相同的'如果(!condition2);' 這是否意味着執行自動繼續從正確的點(在這種情況下,'while循環的開始)? – Jus12 2010-01-14 00:54:32
它只是我還是他們不是邏輯上相同。 在第一組代碼中,如果condition1 = true且someInteger = 1且condition2 = true,那麼 //這裏的其他東西不會被執行。 但在具有相同條件的第二個代碼塊中'//其他的東西在這裏* *將被執行。 – David 2010-01-14 00:56:43
@大衛 - 我和你在一起,我沒有看到它。 – danben 2010-01-14 01:00:03