2012-02-10 108 views
2

我們有一個在Weblogic應用服務器11上運行的Java 6的應用程序。我試圖調試一個問題。我的代碼是調試器行爲在if,else if,else

if(a==0){ 
    //Do A 
} 
else if(a==1){ 
    // Do B 
} 
else{ 
    // do C 
} 

我的問題是,即使我如果塊是真實的,第2行執行仍然調試器會去其他中塊行8。 我的機器和服務器上的代碼是同步的,所以沒有不匹配。 請幫我找出可能是我的代碼有問題。

+1

使用'int'賦值作爲條件時,你不會得到編譯器錯誤嗎? – 2012-02-10 08:38:25

+0

這個新代碼也很好。請使用複製粘貼。 – 2012-02-10 09:11:08

回答

1

我們需要知道什麼是// Do C

如果有分配:

if (a == 0) { 
     b = 1; 
} else if (a == 1) { 
     b = 0; 
} 
else { 
     b = null; 
} 

一個典型的優化,一些編譯器做的是:

b = null; 
if (a == 0) { 
    b = 1; 
} else if (a == 1) { 
    b = 0; 
} 

這就是執行的字節碼。更不用說,如果代碼被JIT編譯器編譯爲本地代碼。 因此,根據您的調試客戶端和jdk,您可以看到瘋狂的當前指令行。但只要區塊末端的狀態是預期的,就可以。

有時執行需要關閉語句。所以它結束了。

確保沒有將static值分配給a,如果是,則重新編譯。靜態分配在編譯時被鏈接。

+0

+1好的想法。 – Gangnus 2012-02-10 09:13:28

+0

double value == 0;如果(a == 0){value = 3; }否則如果(a == 1){value = 2; } else {value = 0; }我認爲這是可能發生的事情。謝謝。感謝您的幫助 – Vivek 2012-02-10 09:17:46

+0

「else {}」空產生一條關閉指令。你爲什麼不把它刪除,看看這個'修復'? – ssedano 2012-02-10 09:24:18

0

它不應該是:

if(a==0) 
... 
else if(a==1) 
... 
else 
... 
0

不要忘記,=是分配和==是一個比較 - 在​​你的情況,你要指定的值,然後檢查分配結果,不進行比較。

簡單地改變

if(a=0){ 
    //Do A 
} 
else if(a=1){ 
    // Do B 

if(a==0){ 
    //Do A 
} 
else if(a==1){ 
    // Do B 
+0

對不起。當我寫信求助時,這是一個錯字。在我的實際代碼中,條件是不同的。我已經編輯了我的初始帖子。這個問題仍然存在。謝謝 – Vivek 2012-02-10 09:00:11

+0

@誰低估 - 爲什麼?這是發佈的問題的正確答案... – Basic 2012-02-10 11:54:14