簡體   English   中英

模糊條件Java語法

[英]Obscure conditional Java Syntax

我們剛剛找到了一位同事和我,使用If條件語法編寫了一個奇怪的編譯語法:

if (true); {
  foo();
}

這里有人向我們解釋這種奇怪的語法嗎? 謝謝。

對我來說,它看起來像一個帶有空體的if語句,后跟一個始終執行的代碼塊(與if語句無關)。 例如,foo也在這里執行:

if (false); {
    foo();
}

第一部分, if (true); 只是一個無條件的條件,結束於; 剩下的就是調用新范圍塊中的foo() 你應該發現總是調用foo()

這沒有任何意義,但在語法上是正確的。 它也可以寫成

if (true) 
{    
    // do nothing 
}
{   
    foo(); 
}

圍繞foo()的{}; 在這種情況下沒有任何意義 如果定義了變量,它將限制{}內定義的變量的范圍。

{
   int i=0;
   System.out.println(i);
}
{
   String i="hello";
   System.out.println(i);
}

工作得很好。

我認為這是等價的

if (true) {};
foo();

因為if statemnt在分號后結束,而foo語句只是放在一個塊({})中......

如果或者有人計划稍后寫一個條件但是從來沒有這樣做過

我認為你可以安全地刪除這個if語句,這樣做絕對沒有意義。

正如其他人所指出的那樣,語法上它是一個帶有空執行語句的條件(即什么都不做),然后調用包含在范圍括號內的foo()。 foo()總是被執行。 實際上,如果你在一個真實案例而不是編程測試中發現這一點,我懷疑其中一個:

  1. 這是一個印刷錯誤,在這種情況下應該更正(當你發現代碼應該做什么)
  2. 這是一個故意模糊的代碼,旨在混淆讀者,在這種情況下它應該被修復(替換為“foo();”)並且行為人應該被追捕和訓斥
  3. 它是由一個(差的)自動源代碼生成器生成的,在這種情況下應該對它進行注釋以表明這一點
  4. 它從調試會話中遺留下來,在這種情況下,它應該恢復到更改之前的狀態

那是死代碼。 if塊無用。

相當於

if(doesn't matter whats here) {}
foo();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM